#include <stdio.h>
#define infinity 99999
int graph[7][7];
int main()
{
int n1, n2;
scanf("%d,%d", &n1, &n2);
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
if (i != j)
{
graph[i][j] = infinity;
}
else
{
graph[i][j] = 0;
}
}
}
graph[0][1] = 2;
graph[0][3] = 1;
graph[1][3] = 3;
graph[1][4] = 10;
graph[2][0] = 4;
graph[2][5] = 5;
graph[3][2] = 2;
graph[3][4] = 2;
graph[3][5] = 8;
graph[3][6] = 4;
graph[4][6] = 6;
graph[6][5] = 1;
int dist[7], path[7], find[7];
for (int i = 0; i < 7; i++)
{
path[i] = -1;
find[i] = 0;
dist[i] = graph[n1 - 1][i];
}
find[n1 - 1] = 1;
dist[n1 - 1] = 0;
int save;
for (int i = 0; i < 7; i++)
{
int min = infinity;
for (int j = 0; j < 7; j++)
{
if (find[j] != 1 && min > dist[j])
{
save = j;
min = dist[j];
}
}
find[save] = 1;
for (int j = 0; j < 7; j++)
{
if (find[j] != 1 && min + graph[save][j] < dist[j])
{
path[j] = save;
dist[j] = min + graph[save][j];
}
}
}
if (dist[n2 - 1] != infinity)
{
int print[7], run = 0;
int j = n2-1;
while (path[j] != -1)
{
print[run++] = j + 1;
j = path[j];
}
print[run++] = j + 1;
printf("%d,", n1);
while (run > 0)
{
printf("%d,", print[run - 1]);
run--;
}
}
else
printf("-1");
return 0;
}
数据结构第八次作业第一题(最短路径)
最新推荐文章于 2022-05-13 17:36:43 发布