The Meanings Of Problem:
就是给你一个图,给出了两点之间的最小路径,让你判断这样的原先的图存不存在...要是存在输出边的数目
Subjects Catagories:
Floyded
Codes:
#pragma warning(disable:4786)
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN =101;
typedef struct{
int num;
int map[MAXN][MAXN];
}Graphics;
int main(){
int nCase;
Graphics graphics;
cin>>nCase;
for(int i=1;i<=nCase;i++){
cin>>graphics.num;
for(int ii=0;ii<graphics.num;ii++){
for(int j=0;j<graphics.num;j++){
cin>>graphics.map[ii][j];
}
}
bool flag = true;
int count = 0;
for(ii=0;ii<graphics.num&&flag;ii++){
for(int j=0;j<graphics.num&&flag;j++){
if(ii==j)
continue;
int flag_1 = 0;
for(int k=0;k<graphics.num&&flag;k++){
if(ii==k||j==k)
continue;
if(graphics.map[ii][j]>graphics.map[ii][k]+graphics.map[k][j]){
flag =false;
break;
}else{
if(graphics.map[ii][j]==graphics.map[ii][k]+graphics.map[k][j]){
flag_1 = 1;
break;
}
}
}
if(flag_1==0)
count++;
}
}
if(flag)
cout<<"Case "<<i<<":"<<" "<<count<<endl;
else
cout<<"Case "<<i<<":"<<" "<<"impossible"<<endl;
}
return 0;
}