0分求助!!!
查看原帖
0分求助!!!
897873
lwthree楼主2023/9/30 12:52
#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,所以不知道怎么办。

2023/9/30 12:52
加载中...