产生数
参考代码:(弗洛伊德算法)
Tips: Search the question yourself.
#include<bits/stdc++.h>
using namespace std;
int a[32],s[1000],f[11],l1,l2,len,p,k;
bool g[11][11];
char x;
void gjc(int x)
{
for(int i=1;i<=len;i++)
s[i]=s[i]*x;
for(int i=1;i<=len+1;i++)
{
s[i+1]=s[i+1]+s[i]/10;
s[i]=s[i]%10;
}
if(s[len+1]>0) len++;
}
int main()
{
scanf("%c",&x);
p=0;
while(x!=' ')
{
p++;
a[p]=x-'0';
scanf("%c",&x);
}
scanf("%d",&k);
for(int i=1;i<=k;i++)
{
cin>>l1>>l2;
g[l1][l2]=true;
}
for(int m=0;m<=9;m++)
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
g[i][j]=g[i][j]||(g[i][m]&&g[m][j]);
for(int i=0;i<=9;i++)
g[i][i]=true;
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
f[i]=f[i]+(g[i][j]);
len=1;
s[1]=1;
for(int i=1;i<=p;i++)
gjc(f[a[i]]);
for(int i=len;i>=1;i--)
printf("%d",s[i]);
return 0;
}