HDU-1625-Numbering Paths

来源:互联网 发布:纸样软件 编辑:程序博客网 时间:2024/04/30 17:05

题目大意是说给你一些变化规则,让你求出从一个数变到另外一个数的方法数,如果是无限种,则输出-1

由于最后需要用矩阵表示,所以用floyd比较简单,需要特殊处理下有无限种的可能,即出现环的情况

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=101;int n,m,map[maxn][maxn];void solve(){    for(int k=0;k<=m;k++)for(int i=0;i<=m;i++)    for(int j=0;j<=m;j++)if(map[i][k]&&map[k][j])    map[i][j]+=map[i][k]*map[k][j];    for(int k=0;k<=m;k++)if(map[k][k])    for(int i=0;i<=m;i++)for(int j=0;j<=m;j++)    if(map[i][k]&&map[k][j])map[i][j]=-1;    for(int i=0;i<=m;i++,printf("\n"))for(int j=0;j<=m;j++)    printf(" %d",map[i][j]);}int main(){    int cas=0;    while(scanf("%d",&n)!=EOF)    {memset(map,0,sizeof(map));m=0;for(int i=0;i<n;i++){    int u,v;    scanf("%d%d",&u,&v);    map[u][v]=1;    m=max(m,u);    m=max(m,v);}printf("matrix for city %d\n",cas++);solve();    }    return 0;}


原创粉丝点击