所有的牛去一個牛的家裡參加聚會,所給的路徑是單向的,問往返的所有牛的路徑長度中最長的是多少?
解法:往返時候翻轉矩陣,再求一遍最短路徑,兩次相加後進行比較。
#include#include #include #include #include using namespace std; const int MAXV = 4010; const int inf = 10000000; int map[MAXV][MAXV];//路徑長度 int d[MAXV],re_d[MAXV];//距離 bool vis[MAXV]; int n,m,x; void dijkstra(int s) { for(int i=1;i<=n;i++) { vis[i]=0; d[i]=map[s][i]; } d[s] = 0; while (1) { int min=inf,v = -1; for(int i=1;i<=n;i++) if(!vis[i] && d[i] d[v] + map[v][i]) d[i]=map[v][i]+d[v]; } } int main() { int i,j,a,b,c; while(scanf(%d%d%d,&n,&m,&x) != EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j) map[i][i]=0; else map[i][j] = inf; } for(i=1;i<=m;i++) { scanf(%d%d%d,&a,&b,&c); if(map[a][b]>c) map[a][b]=c; } dijkstra(x); for(int i=1;i<=n;i++) re_d[i] = d[i]; for(int i=1;i<=n;i++) for(int j=1;j