Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Diskret / Graf_deep / main

.cpp
Скачиваний:
7
Добавлен:
18.08.2019
Размер:
1.71 Кб
Скачать
#include <iostream>

using namespace std;
int main()
{
int N, Start, m, p, i, j, k;
int *LIFO; // Объявляет структуру данных "стек"
int *Label; // Объявляет массив меток

N = 7;//кол-во вершин в графе

int Graf[7][7] ={{0,1,1,0,0,0,0},
                 {1,0,1,0,0,0,1},
                 {1,1,0,0,0,0,0},
                 {0,0,0,0,1,1,0},
                 {0,0,0,1,0,1,0},
                 {0,0,0,1,1,0,1},
                 {0,1,0,0,0,1,0}};

for(i=0;i<N;i++)//Распечатать матрицу смежности
{
    for(j=0;j<N;j++)
        cout << Graf[i][j] << " ";
cout << endl;
}

cout << "Input start point" << endl;
cin >> Start;

LIFO=new int [N]; //для стека память
Label=new int [N]; // для массива меток,

for (i=0; i<N; i++)
    Label[i] = 0;

LIFO[0]=Start; // Заносит в стек стартовую вершину
Label[Start]=1; // Присваивает стартовой вершине метку 1
m=1;// Позиция вершины стека
k=1;// Начальное значение метки

while (k!=0) {
p=0;
for (i=0; i<N; i++)
if (Graf[LIFO[k-1]][i]==1)
    {
      p=1; break;
    }

if (p!=0)
{
if (Label[i]==0)
    {
    LIFO[k]=i; // Заносит вершину в стек
    m++; // Увеличивает значение метки
    Label[i]=m; //
    Graf[LIFO[k-1]][i]=2;
    Graf[i][LIFO[k-1]]=2;
    k++; // Сдвигает позицию вершины стека //на единицу вверх
    }
    else
    {
        Graf[i][LIFO[k-1]]=3;// Помечает ребро как обратное
        Graf[LIFO[k-1]][i]=3;
    }
}
else k--;

for (i=0; i<N; i++)
cout << Label [ i ] << " " ;//распечатать порядок обхода
cout << endl;
}

cout << endl;

for(i=0;i<N;i++)
{
    for(j=0;j<N;j++)
        cout << Graf[i][j] << " ";
cout << endl;
}

cin.get(); // Задерживает экран
return 0;
}
Соседние файлы в папке Graf_deep
  • #
    18.08.20191.08 Кб7Graf_deep.cbp
  • #
    18.08.2019103 б7Graf_deep.depend
  • #
    18.08.2019321 б7Graf_deep.layout
  • #
    18.08.20191.71 Кб7main.cpp