?
求牛参加聚会的往返最长的路径是多少。往返的时候翻转矩阵,再计算一次,两次求和。
?
#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
?