统计路径数量 用warshall算法就行 即 a[i][j] += a[i][k]*a[k][j];
但是要判断环的存在 a[k][k] !=0 代表有环 只要经过K点 则路径数就不确定 设为-1;
#include<cstdio>
#include<cstring>int a[100][100];
int main()
{
int count = 0,n,x,y;
while(scanf("%d",&n)==1)
{
memset(a,0,sizeof(a));
int min=-1;
for(int i = 0; i < n; i++)
{
scanf("%d %d",&x,&y);
a[x][y] = 1;
if(min < x) min = x;
if(min < y) min = y;
}
for(int k = 0; k <= min; k ++)
for(int i = 0; i <= min; i++)
for(int j = 0; j <= min; j++)
a[i][j] += a[i][k]*a[k][j];
for(int k = 0; k <= min; k ++)
if(a[k][k])
for(int i = 0; i <= min; i++)
for(int j = 0; j <= min; j++)
if(a[i][k]&&a[k][j])
a[i][j] = -1;
printf("matrix for city %d\n",count++);
for(int i = 0; i <= min; i++)
{
for(int j = 0; j <= min-1; j++)
printf("%d ",a[i][j]);
printf("%d\n",a[i][min]);
}
}
return 0;
}