#include <bits/stdc++.h>
using namespace std;
int fromto[30][30];
int vis[30][30];
int tot;
void dfs(int from)
{
for (int i=0;i<30;i++)
{
if (fromto[from][i]==1)
{
if (!vis[from][i])
{
vis[from][i]=1;
dfs(i);
tot++;
vis[from][i]=0;
}
}
}
}
int main()
{
string n;
cin>>n;
int k;
cin>>k;
int from,to;
memset(vis,0,sizeof(vis));
for (int i=0;i<k;i++)
{
cin>>from>>to;
fromto[from][to]=1;
}
int mult=1;
for (int i=0;i<n.size();i++)
{
tot=1;
dfs(n[i]-'0');
cout<<tot<<endl;
mult*=tot;
}
cout<<mult;
return 0;
}
想法:dfs每一位的可能,然后将可能性都相乘。
推测原因:可能是没有计入一开始的数字。于是我将tot一开始设为1,但如果遇到回环就会多了1,所以不知道怎么办。