Кратчайший путь в неориентированном графе без весов

Содержание

Слайд 2

Кратчайший путь в неориентированном графе без весов

Кратчайший путь в неориентированном графе без весов

Слайд 3

Задан граф с начальной 1-ой и конечной 14-ой

Найти кратчайший путь

Задан граф с начальной 1-ой и конечной 14-ой Найти кратчайший путь

Слайд 4

Матричная форма графа

Матричная форма графа

Слайд 5

Ввод данных

int main() {
int G[100][100], // граф транспортной сети
I,j,n, //

Ввод данных int main() { int G[100][100], // граф транспортной сети I,j,n,
n – число вершин
n_p,k_p; // начало и конец пути
cin >> n >> n_p >> k_p;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
cin >> G[i][j];

Слайд 6

1 задача – определение длины кратчайшего пути до вершин графа

Длина пути
1 –

1 задача – определение длины кратчайшего пути до вершин графа Длина пути
1
2,3,4 – 2
5,6,!2 – 3
8,9,34,15 – 4
10,13 – 5
11 – 6

Слайд 7

Oпределение длины кратчайшего пути

int r[100]={0}, // 0 – расстояние не определено
ob[100],

Oпределение длины кратчайшего пути int r[100]={0}, // 0 – расстояние не определено
// обработанные вершины
a=1, // вершина из ob , которая обрабатывается
p=2; // пустое место для записи новых вершин
r[n_p]=1; // кратчайший путь в n_p – 1
ob[1]=n_p; //
while a

for (i=0; i if (G[i][ob[a]]==1 & r[i]==0) { //необработанные вершины
r[i]=r[ob[a]]+1;
ob[++p]=I;
}
a++;
}

Слайд 8

2 задача - Анализ вектора расстояний

if (r[k_p]==0) {cout << “нет пути”; return

2 задача - Анализ вектора расстояний if (r[k_p]==0) {cout int jul[100], //
0;}
int jul[100], // кратчайший путь
m=k_p; // новая найденная вершина в пути
while (n_p!=m) {
jul[r[m]]=m;
for (i=0;G[i][m]==0 || r[i]>=r[m]; i++};
m=i;
}
Jul[1]=n_p;
for (i=1; i<=r[k_p]; i++) cout << jul[i]<< “ “;

Слайд 9

Кратчайший путь в неориентированном графе с весами

Кратчайший путь в неориентированном графе с весами

Слайд 10

Задан граф с начальной 1-ой и конечной 14-ой

Найти кратчайший путь

Задан граф с начальной 1-ой и конечной 14-ой Найти кратчайший путь

Слайд 11

Матричная форма графа

Матричная форма графа

Слайд 12

Ввод данных

int main() {
int G[100][100], // граф транспортной сети
I,j,n, //

Ввод данных int main() { int G[100][100], // граф транспортной сети I,j,n,
n – число вершин
n_p,k_p; // начало и конец пути
cin >> n >> n_p >> k_p;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
cin >> G[i][j];

Слайд 13

1 задача – определение длины кратчайшего пути до вершин графа

Длина пути
1 –

1 задача – определение длины кратчайшего пути до вершин графа Длина пути
0 9 – 15
2 – 3 10 – 20
3 – 5 11 – 32
4 – 5 12 – 12
5 – 13 13 – 24
6 – 12 14 – 18
7 – 8 15 – 14
8 – 16

Слайд 14

Oпределение длины кратчайшего пути

int r[100]={-1}, // -1 – расстояние не определено
r[n_p]=0; //

Oпределение длины кратчайшего пути int r[100]={-1}, // -1 – расстояние не определено
кратчайший путь в n_p – 0
for (int k=0; k for (i=0; i for (j=0; j if (G[i][j]>0 & r[i]>=0)
if (r[j]==-1 | r[j]>r[i]+G[[i][j]) r[j]=r[i]+(G[i][j];

Слайд 15

2 задача - Анализ вектора расстояний

if (r[k_p]==-1) {cout << “нет пути”; return

2 задача - Анализ вектора расстояний if (r[k_p]==-1) {cout int jul[100], //
0;}
int jul[100], // кратчайший путь
m=k_p; // новая найденная вершина в пути
while (n_p!=m) {
jul[r[m]]=m;
for (i=0;G[i][m]==0 || r[i]>r[m]+G[m][i]; i++};
m=i;
}
Jul[1]=n_p;
for (i=1; i<=r[k_p]; i++) cout << jul[i]<< “ “;