First line of each case is an integer N (1 ≤ N ≤ 100), the number of vertexes.
Following N lines each contains N integers. All these integers are less than 1000000.
The jth integer of ith line is the shortest path from vertex i to j.
The ith element of ith line is always 0. Other elements are all positive.
3
0 1 1
1 0 1
1 1 0
3
0 1 3
4 0 2
7 3 0
3
0 1 4
1 0 2
4 2 0
Case 2: 4
Case 3: impossible
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=105;
int t,tt,n;
int vis[N][N],mp[N][N];
int solve()
{
int i,j,k,m=0;
memset(vis,0,sizeof(vis));
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i!=j&&i!=k&&k!=j)
{
//如果相等则说明ij的连线多余的
if(mp[i][j]==mp[i][k]+mp[k][j]&&!vis[i][j])
{
vis[i][j]=1;
m++;
}
//三角形第三边大于两边之和,形不成三角形,构不成图!
if(mp[i][j]>mp[i][k]+mp[k][j])
return -1;
}
return m;
}
int main()
{
scanf("%d",&t);
for (int ca=1;ca<=t;ca++)
{
printf("Case %d: ",ca);
int i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&mp[i][j]);
int ans=solve();
if (ans==-1)
puts("impossible");
else
printf("%d\n",n*(n-1)-ans);
}
}