您的位置:首页 > 其它

POJ 1797

2013-04-22 18:40 387 查看
这个题就是求两点之间最长路径,将dijkstra算法中松弛那部分的“<”改为“>”即可。
#include<iostream>#include<string>using namespace std;int n,m;int map[1000][1000];int vis[1000],d[1000];int min(int a,int b){ if(a>b) return b; return a;}void dijkstra(){ int i,j; memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) d[i]=map[i][1]; vis[1]=1; int max,now; for(i=1;i<n;i++){ max=0; for(j=1;j<=n;j++){ if(!vis[j]&&d[j]>max){ max=d[j]; now=j; } } vis[now]=1; for(j=1;j<=n;j++) if(!vis[j]&&min(d[now],map[now][j])>d[j]) d[j]=min(d[now],map[now][j]);
}
}int main(){ int t,i,j,x,y,z,q; cin>>t; for(q=1;q<=t;q++){ cin>>n>>m; if(n==1){ printf("0\n"); continue; }
memset(map,0,sizeof(map)); for(i=1;i<=m;i++){ cin>>x>>y>>z; map[x][y]=map[y][x]=z; } dijkstra(); printf("Scenario #%d:\n%d\n\n", q,d
); } return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: