![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4b86131f8065b9e91a6db2e012aaa92c.jpeg)
#include <iostream>
#include "print_array.h"
#define Max_size 1000
using namespace std;
int v = 8, inf = 99;
int flag[Max_size] = {1, 0}, map[Max_size][Max_size] = {0}, d[Max_size] = {0, 1, 5, 99, 99, 99, 99, 99, 99, 99};
int main()
{
int origin;
inital();
for (int i = 0; i < v; i++)
{
int min = inf;
for (int j = 0; j <= v; j++)
if (flag[j] == 0 && d[j] < min)
min = d[j], origin = j;
flag[origin] = 1;
for (int j = 0; j <= v; j++)
if ((!flag[j]) && (map[origin][j] != inf) && (d[origin] + map[origin][j]) < d[j])
d[j] = d[origin] + map[origin][j];
}
cout << d << endl;
return 0;
}
void inital()
{
map[0][1] = 1, map[0][2] = 5,
map[1][2] = 3, map[1][3] = 7, map[1][4] = 5,
map[2][4] = 1, map[2][5] = 7,
map[3][4] = 2, map[3][6] = 3,
map[4][6] = 6, map[4][7] = 9,
map[5][7] = 5,
map[6][7] = 2, map[6][8] = 7,
map[7][8] = 4;
for (int i = 0; i <= v; i++)
{
for (int j = 0; j <= v; j++)
{
if (map[i][j] == 0)
map[i][j] = inf;
else
map[j][i] = map[i][j];
}
}
}