题意:
求两点之间路径中的最大值值最小,直接floyd
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int mp[105][105],n,m,q; void floyd() { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { if(mp[i][k]==-1) continue; for(int j=1;j<=n;j++) { if(mp[k][j]==-1) continue; int temp=mp[i][k]>mp[k][j]?mp[i][k]:mp[k][j]; if(mp[i][j]==-1||temp<mp[i][j]) mp[i][j]=temp; } } } } int main() { int cas=1; while(scanf("%d%d%d",&n,&m,&q)!=EOF) { if(n+m+q==0) break; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) mp[i][j]=-1; mp[i][i]=0; } for(int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); mp[x][y]=mp[y][x]=z; } floyd(); printf("Case #%d\n",cas); while(q--) { int x,y; scanf("%d%d",&x,&y); if(mp[x][y]==-1) printf("no path\n"); else printf("%d\n",mp[x][y]); } } return 0; }
时间: 2024-11-10 15:13:48