Floyd的应用,修改下判断条件,不过没有初始化,开始忽略了一个特殊情况,就是两点间无直接连线,靠间接联系在一起 cin真的好慢! 代码: #include<iostream> using namespace std; int g[301][301]; int max(int a,int b) { return a>b?a:b; } int min(int a,int b) { return a<b?a:b; } int main() { int i,j,k,n,w,m,a,b,test,t; cin>>n>>m>>test; memset(g,0,sizeof(g)); for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&w); if(g[a][b]) g[a][b]=min(w,g[a][b]); else g[a][b]=w; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(g[i][k]>0&&g[k][j]>0) { t=max(g[i][k],g[k][j]); if(g[i][j]>0) g[i][j]=min(g[i][j],t); else g[i][j]=t; } } while(test--) { scanf("%d%d",&a,&b); if(g[a][b]==0) printf("-1/n"); else printf("%d/n",g[a][b]); } return 0; }