产生数
1 #include<iostream>
2 #include<cstdio>
3 #include<queue>
4 using namespace std;
5 const int N=10005;
6 int n,k,r[20][2],exist[N],ans=1;
7 queue<int> q;
8 void cnt(){
9 while(!q.empty()){
10 int mod=1,x,y=q.front();
11 x=y;q.pop();
12 while(x){
13 int t=x%10;
14 x/=10;
15 for(int i=1;i<=k;i++)
16 if(r[i][0]==t){//满足变换条件
17 int p=y+(r[i][1]-t)*mod;//得到变换后的数
18 if(!exist[p]){
19 exist[p]=1;
20 ans++;
21 q.push(p);
22 }
23 }
24 mod*=10;
25 }
26 }
27 }
28 int main(){
29 cin>>n>>k;
30 for(int i=1;i<=k;i++)
31 scanf("%d%d",&r[i][0],&r[i][1]);
32 q.push(n);
33 exist[n]=1;
34 cnt();
35 cout<<ans;
36 return 0;
37 }