n 次爆表,还是找到了错误,原来是把Floyd()写在循环体里了。。。。
不足之处,多多指教。
14481443 2015-08-12 17:12:05 Accepted 1596 3588MS 15960K 1010 B C++
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 1005;
const int INF = 0xffffff;
int n;
double maps[maxn][maxn];
double dist[maxn][maxn];
void floyd(){
for(int i = 1; i <= n; i++){
for(int j =1 ;j<=n; j++){
dist[i][j] = maps[i][j];
}
}
for(int k = 1 ; k <= n; k++){
for(int i = 1; i <= n ; i++){
for(int j = 1; j <= n; j++){
if(dist[i][j] < INF && dist[k][j] <INF )
dist[i][j] =max(dist[i][j],dist[i][k] *dist[k][j]);
}
}
}
}
int main(){
int m, s, e;
while(scanf("%d",&n)!=EOF){
memset(maps,0,sizeof(maps));
for(int i = 1; i <= n ; i++ ){
for(int j = 1; j <= n; j++){
scanf("%lf",&maps[i][j]);
}
}
scanf("%d",&m);
floyd();
while(m--){
scanf("%d%d",&s, &e);
if(dist[s][e] == 0){
printf("What a pity!\n");
}else {
printf("%.3lf\n",dist[s][e]);
}
}
}
return 0;
}