Floyd的應用,修改下判斷條件,不過沒有初始化,開始忽略了一個特殊情況,就是兩點間無直接連線,靠間接聯絡在一起
cin真的好慢!
代碼:
#include<iostream><br />using namespace std;<br />int g[301][301];<br />int max(int a,int b)<br />{<br />return a>b?a:b;<br />}<br />int min(int a,int b)<br />{<br />return a<b?a:b;<br />}<br />int main()<br />{<br />int i,j,k,n,w,m,a,b,test,t;<br />cin>>n>>m>>test;<br />memset(g,0,sizeof(g));<br />for(i=1;i<=m;i++)<br />{<br />scanf("%d%d%d",&a,&b,&w);<br />if(g[a][b])<br />g[a][b]=min(w,g[a][b]);<br />else<br />g[a][b]=w;<br />}<br />for(k=1;k<=n;k++)<br />for(i=1;i<=n;i++)<br />for(j=1;j<=n;j++)<br />{<br />if(g[i][k]>0&&g[k][j]>0)<br />{<br />t=max(g[i][k],g[k][j]);<br />if(g[i][j]>0)<br />g[i][j]=min(g[i][j],t);<br />else<br />g[i][j]=t;<br />}<br />}<br />while(test--)<br />{<br />scanf("%d%d",&a,&b);<br />if(g[a][b]==0)<br />printf("-1/n");<br />else<br />printf("%d/n",g[a][b]);<br />}<br />return 0;<br />}<br />