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;
- }
#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;
}