标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034
3 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 1: 6 Case 2: 4 Case 3: impossible
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int Map[110][110],n;
int Search()
{
int flag=1;
int ans=0;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
if (i==j)
continue;
for (int k=1; k<=n; k++)
{
if (i==k&&j==k)
continue;
if (Map[i][j]>Map[i][k]+Map[k][j]&&Map[i][k]&&Map[k][j])
{
flag=0;
return -1;
}
else
{
if (Map[i][j]==Map[i][k]+Map[k][j]&&Map[i][k]&&Map[k][j])
{
ans++;
break;
}
}
}
}
}
return ans;
}
int main()
{
int T;
int nn;
int Case=1;
scanf("%d",&T);
while (T--)
{
nn=0;
scanf("%d",&n);
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
scanf("%d",&Map[i][j]);
if (Map[i][j]!=0)
nn++;
}
}
printf ("Case %d: ",Case++);
int cmp=Search();
if (cmp==-1)
printf ("impossible\n");
else
printf ("%d\n",nn-cmp);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/qiqi_skystar/article/details/50018175