hdu 1625(flyd判正环)

来源:互联网 发布:模拟组装电脑软件 编辑:程序博客网 时间:2024/04/30 16:11

//自己能到自己,则表示这个点在环上;


#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int mat[31][31],n,m;int main(){    int a,b,i,j,k,cas=0;    while(scanf("%d",&m)!=EOF)    {        memset(mat,0,sizeof(mat));        for(i=n=1;i<=m;i++){            scanf("%d%d",&a,&b);            mat[a+1][b+1]=1;            n=max(n,max(a+1,b+1));        }        for(i=1;i<=n;i++){            for(j=1;j<=n;j++){                for(k=1;k<=n;k++){                    mat[j][k]+=mat[j][i]*mat[i][k];                }            }        }        for(i=1;i<=n;i++){            if(mat[i][i]){                mat[i][i]=-1;                for(j=1;j<=n;j++){                    for(k=1;k<=n;k++){                        if(mat[j][i]&&mat[i][k])                            mat[j][k]=-1;                    }                }            }        }        printf("matrix for city %d\n",cas++);        for(i=1;i<=n;i++){            for(j=1;j<=n;j++)                printf(" %d",mat[i][j]);            printf("\n",mat[i][j]);        }    }    return 0;}