POJ 2263 Heavy Cargo 最短路dijkstra
字符串处理+dijkstra修改一下
View Code
#include<stdio.h> #include<string.h> #define maxn 201 int n,m,num; int dis[maxn],adj[maxn][maxn]; bool vis[maxn]; int MIN(int a ,int b) { return a < b ? a : b; } int MAX(int a, int b) { return a > b ? a :b; } char str[201][35],s[35]; int find() { int i; for(i=0;i<num;i++) { if(strcmp(str[i],s)==0)return i; } strcpy(str[num++],s); return num-1; } int dijkstra(int v, int e) { int i ,j ,k, u, max; for(i=0;i<n;i++) { dis[i]=adj[v][i]; vis[i]=0; } vis[v]=1;dis[v]=0; for(i=0;i<n-1;i++) { max = -1; for(j=0;j<n;j++) { if(max < dis[j]&&!vis[j]) { max = dis[j]; u = j; } } if(max == -1)break; vis[u]=1; for(j=0;j<n;j++) { if(!vis[j]&&adj[u][j]>-1) { dis[j]=MAX(MIN(dis[u],adj[u][j]),dis[j]); } } } return dis[e]; } int main() { int i,j,x,y,w,X=1; while(~scanf("%d%d",&n,&m)&&n) { num=0; memset(str,0,sizeof(str)); for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { adj[i][j]= -1; } } while(m--) { scanf("%s",s); x=find(); scanf("%s",s); y=find(); scanf("%d",&w); if(adj[x][y] < w) { adj[x][y]=w; adj[y][x]=w; } } scanf("%s",s);int ss=find(); scanf("%s",s);int t=find(); printf("Scenario #%d\n%d tons\n\n",X++,dijkstra(ss,t)); } return 0; }


浙公网安备 33010602011771号