hdu(4005)floyd

来源:互联网 发布:域名注册是什么 编辑:程序博客网 时间:2024/06/05 04:24

给出没两点之间的最短距离,问合法还是不合法,合法请输出原图中最少加的边数。

#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 110int Q[MAXN][MAXN];unsigned char flag[MAXN][MAXN];enum boolean { FALSE,TRUE};int N;int main(){    int T,CE;    int i,j,k,total;    int BREAK;    scanf("%d",&T);    for ( CE = 1; CE <= T; CE++)    {        scanf("%d",&N);        for (i = 1; i <= N; i++)            for (j = 1; j <= N; j++)                scanf("%d",&Q[i][j]);        memset(flag,FALSE,sizeof(flag));        total = N*N-N;        BREAK = FALSE;        for (k = 1; k <= N &&!BREAK; k++)        {            for (i = 1; i <= N&&!BREAK; i++)            {                for(j = 1; j <= N&&!BREAK;j++)                {                    if (i==k||j==k) continue;                    if (Q[i][j] > Q[i][k]+Q[k][j])                    {                        BREAK = TRUE;                        break;                    }                    if (Q[i][j] == Q[i][k]+Q[k][j] && flag[i][j]==FALSE)                    {                        total--;                        flag[i][j] = TRUE;                    }                }            }        }        printf("Case %d: ",CE);        if (BREAK)            printf("impossible\n");        else            printf("%d\n",total);    }    getchar();    return 0;}


原创粉丝点击