其中一个数可不可能变成多个数,如:
2→3
2→4
用深搜超时了,在想办法剪枝
原代码奉上
#include<cstdio>
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
bool guize[110]={0};
short la,lb,n[40],l_n,k,ans=0;
string sn;
void dfs(int x){
if(x==l_n){
ans++;
return;
}
for(int i=1;i<10;i++){
if(guize[10*n[x]+i]==1){
int lc=n[x];
n[x]=i;
dfs(x);
n[x]=lc;
}
}
dfs(x+1);
return;
}
int main(){
cin>>sn>>k;
l_n=sn.length();
for(int i=0;i<l_n;i++){
n[i]=sn[i]-48;
}
for(int i=0;i<k;i++){
cin>>la>>lb;
guize[10*la+lb]=1;
}
dfs(0);
cout<<ans;
return 0;
}
求大佬解答!!!