POJ 1797 Heavy Transportation 最短路 修改一下dijkstra
dijkstra略微做下修改
View Code
#include<stdio.h> #include<string.h> #define maxn 1001 #define INF 100000000 int MIN(int a, int b) { return a < b ? a : b; } int dis[maxn],adj[maxn][maxn]; bool vis[maxn]; int n, m; void dijkstra(int v) { int i, j, k, u, max; for(i=1;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; } vis[v]=1;dis[v]=0; for(i=1;i<n;i++) { max = 0; for(j=1;j<=n;j++) if(max < dis[j]&&!vis[j]) { max = dis[j]; u = j; } if(max == 0)break; vis[u]=1; for(j=1;j<=n;j++) { if(dis[j] < MIN(adj[u][j],dis[u])&&!vis[j]) { dis[j] = MIN(adj[u][j],dis[u]); } } } } int main() { int i, j, x, y, w, X=1,cas; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=n;j++) adj[i][j]=-1; while(m--) { scanf("%d%d%d",&x,&y,&w); if(adj[x][y] < w) { adj[x][y]=w; adj[y][x]=w; } } dijkstra(1); printf("Scenario #%d:\n%d\n",X++, dis[n]); if(X!=cas)puts(""); } return 0; }


浙公网安备 33010602011771号