hdu 4034 Graph Floyd

来源:互联网 发布:淘宝达人赚钱 编辑:程序博客网 时间:2024/05/29 23:45

题意是告诉你全部一张图点与点之间的最短路,问你原图最少有几个点?

#include<bits/stdc++.h>using namespace std;int mp[100+5][100+5],d[100+5][100+5];int main(){    int _,n,i,j,k,p,ans;    scanf("%d",&_);    for(p=1; p<=_; p++)    {        scanf("%d",&n);        ans=0;        for(i=0; i<n; i++)            for(j=0; j<n; j++)                scanf("%d",&mp[i][j]);        int flag=1;        memset(d,0,sizeof(d));        for(i=0; i<n; i++)        {            for(k=0; k<n; k++)            {                for(j=0; j<n; j++)                {                    if(i==k||i==j||k==j) continue;                    if(mp[i][j]==mp[i][k]+mp[k][j]&&!d[i][j])                        ans++,d[i][j]=1;                    if(mp[i][j]>mp[i][k]+mp[k][j])                    {                        flag=0;                        break;                    }                }                if(flag==0) break;            }            if(flag==0) break;        }        if(flag)            printf("Case %d: %d\n",p,n*(n-1)-ans);        else            printf("Case %d: impossible\n",p);    }    return 0;}
0 0