Добавил:
yermolenkoigor9
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <iostream>
using namespace std;
int main()
{ int *Label; // объявляем массив меток
int *FIFO; // объявляем СД очередь
int i,j,k,p,cur;
int Start, Finish, N, M;
int Graf[6][6] = {{0,0,0,1,1,0},
{0,0,1,0,1,0},
{0,1,0,1,1,1},
{1,0,1,0,0,0},
{1,1,1,0,0,1},//N = 6 M = 8
{0,0,1,0,1,0}};
/*
int Graf[6][6] = {{0,1,0,0,1,0},
{0,0,1,0,1,0},
{0,1,0,1,0,1},
{1,0,1,0,0,0},
{0,0,1,0,0,1},
{0,0,1,0,1,0}};//M = 9*/
/*
int Graf[9][9] = {{0,1,0,1,0,0,1,0,0},
{0,0,1,0,1,0,0,0,0},
{0,1,0,1,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,1,0,0},
{0,0,0,0,1,0,0,0,0},
{0,0,0,0,1,0,1,0,0},
{0,0,0,0,0,0,0,1,0},//N = 9
{0,0,0,0,1,0,0,1,0}};//M = 13*/
N = 6;// количество вершин в графе N
M = 8;// количество ребер в графе M
cout << "Input start point" << endl;
cin >> Start;
Label= new int [N];
FIFO= new int [N];
for(i=0;i<M;i++){FIFO[i]=0;Label[i]=9;}
p=0; // указатель на начало очереди
k=1; // указатель на конец очереди
FIFO[p]=Start;// заносим стартовую вершину обхода в очередь
Label[Start]=0; // и помечаем ее меткой 0
while (p!=k) {
cur=FIFO[p]; // выбираем 1-ый элемент в очереди и
p++;
for(i=0;i<N;i++)
{
if(Graf[cur][i]==1 && Label[i]>Label[cur]+1)
{
for(j=0;j<N;j++) cout << Label[j] << " " ; cout << "Label ";
for(j=0;j<N;j++) cout << FIFO [j] << " " ; cout << "FIFO " << endl;
FIFO[k]=i; // выделяем очередную вершину из очереди
k++; // сдвигаем указатель начала на 1
Label[i] = Label[cur]+1; //помечаем вершину
}
}
}
for(j=0;j<N;j++) cout << Label[j] << " " ; cout << "Label ";
for(j=0;j<N;j++) cout << FIFO [j] << " " ; cout << "FIFO " << endl;
cout << "Input point of destination" << endl;
cin >> Finish;
cout << "Distance to the vertex: " << Label[Finish] << endl;
cin.get();
return 0;
}