题意:
有一张有向无环图,给出每个点到另一个点的方案数的个位数,让你还原这张图
分析:
s 到 e 的方案中要么直达,要么经过 k(s < k < e)(只能是一种,因为无环);为了不重复计算,只需要知道 s 能否直接到达 k ,能就加上 k到 e 的方案,最后判断是否需要直达即可
即统计s经过k到达e的路径数,如果取模后不等于已知的路径数,则s->k 是直达的。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
char a[501][501];
int r[501][501];
int main()
{
cin>>n;
for(int i = 1;i <= n; ++i) scanf("%s",a[i]+1);
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
int sum=0;
for(int k=i+1;k<j;k++)
{
if(r[i][k])sum+=a[k][j]-'0';///防止重复
}
if(sum%10!=a[i][j]-'0')r[i][j]=1;///直达
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)cout<<r[i][j];
cout<<endl;
}
return 0;
}