没开O2,3个RE;
开了O2,紫气东来(全RE)。
#include<iostream>
using namespace std;
int n,m;
int map[111][111];
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
for(int ii=1;ii<=n;ii++){
if(i==ii){map[i][ii]=0;}
else{map[i][ii]=-1;}
}
}
for(int i=1,A,B,C;i<=m;i++){
scanf("%d %d %d",&A,&B,&C);
if(map[A][B]==-1 || map[A][B]>C){
map[A][B]=map[B][A]=C;
}
}
int path[n][n];
for(int i=1;i<=n;i++){
for(int ii=1;ii<=n;ii++){
if(i==ii || map[i][ii]==-1){path[i][ii]=-1;}
else{path[i][ii]=i;}
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int ii=1;ii<=n;ii++){
if(i==k || k==ii || i==ii){continue;}
if(map[i][k]==-1 || map[k][ii]==-1){continue;}
if(map[i][ii]==-1){
map[i][ii]=map[i][k]+map[k][ii];
path[i][ii]=path[k][ii];
}else if(map[i][ii]>map[i][k]+map[k][ii]){
map[i][ii]=map[i][k]+map[k][ii];
path[i][ii]=path[k][ii];
}
}
}
}
for(int i=1;i<=n;i++){
for(int ii=1;ii<=n;ii++){
printf("%d ",map[i][ii]);
}
printf("\n");
}
return/*191981*/0;
}
Why 啊???