算法
floyed(改版)
思路
关于路径,可用最短路;保存路径信息,可用floyed;
核心
g[i][j]=min(g[i][j],max(g[i][k],g[k][j]));
代码
#include<bits/stdc++.h> using namespace std; int n,m,Q; int g[110][110]; int T; inline int read() { int tot=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') { tot=tot*10+c-'0'; c=getchar(); } return tot; } int main() { n=read();m=read();Q=read(); while(1) { T++; memset(g,0x3f,sizeof(g)); for(int i=1;i<=m;i++) { int x=read(),y=read(),z=read(); g[x][y]=z; g[y][x]=z; } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { g[i][j]=min(g[i][j],max(g[i][k],g[k][j])); } } } cout<<"Case #"<<T<<endl; while(Q--) { int x=read(),y=read(); if(g[x][y]==0x3f3f3f3f)cout<<"no path "; else cout<<g[x][y]<<endl; } n=read();m=read();Q=read(); if(n||m||Q)cout<<endl; else break; } return 0; }