Добавил:
yermolenkoigor9
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#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;
}