#include <iostream>
using namespace std;
struct point {
int if_perm = 0;
long long length = 2147483647;
};
int n, m, s;
long long road[1010][1010] = { 0 };
int working;
point list[1010];
void func() {
for (int i = 1; i <= n; i++) {
if(road[working][i]!=0)
if (list[working].length + road[working][i] < list[i].length) {
list[i].length = list[working].length + road[working][i];
}
}
long long Min = 2147483647;
int k = 0;
for (int i = 1; i <= n; i++) {
if (list[i].if_perm == 0)
if (list[i].length < Min) {
k = i;
Min = list[i].length;
}
}
if (k == 0) {
return;
}
list[k].if_perm = 1;
working = k;
func();
}
int main()
{
cin >> n >> m >> s;
int x, y, temp;
for (int i = 1; i <= m; i++) {
cin >> x >> y >> temp;
if (road[x][y] == 0||road[x][y]>temp)
road[x][y] = temp;
}
working = s;
list[s].length = 0;
list[s].if_perm = 1;
func();
for(int i = 1; i <= n; i++)
cout << list[i].length << " ";
}
为什么邻接矩阵不能过呢