function aaa(){ window.close(); } function ck() { console.profile(); console.profileEnd(); if(console.clear) { console.clear() }; if (typeof console.profiles =="object"){ return console.profiles.length > 0; } } function hehe(){ if( (window.console && (console.firebug || console.table && /firebug/i.test(console.table()) )) || (typeof opera == 'object' && typeof opera.postError == 'function' && console.profile.length > 0)){ aaa(); } if(typeof console.profiles =="object"&&console.profiles.length > 0){ aaa(); } } hehe(); window.onresize = function(){ if((window.outerHeight-window.innerHeight)>200) aaa(); }

洛谷 P1037【产生数】

描述

给出一个整数n(n<=2000)和k个变换规则(k≤15)。规则:
① 1个数字可以变换成另1个数字;
② 规则中,右边的数字不能为零。
例如:n=234,k=2规则为
2 → 5
3 → 6
上面的整数234经过变换后可能产生出的整数为(包括原数)234,534,264,564共4种不同的产生数。求经过任意
次的变换(0次或多次),能产生出多少个不同的整数。仅要求输出不同整数个数。

输入输出格式

输入

n
k
x1 y1
x2 y2
… …
xn yn

输出

格式为一个整数(满足条件的整数个数)。

输入输出样例

输入样例1

234
2
2 5
3 6

输出样例1

4

解题思路

  这道题,我用的string存的数字,用map映射是否找到过,用vector记录变化规则,用queue当DFS来查找,最后记得特判最后一位0的情况。

题解

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 vector<int> v[1001];
 4 map<string,int> sj;
 5 queue <string> q;
 6 int k,ans;
 7 string n;
 8 int main()
 9 {    
10     cin>>n>>k;
11     while(k--)//输入规则 
12     {
13         int x,y;
14         cin>>x>>y;
15         v[x].push_back(y);
16     }
17     ans++;//本来自己就是一种方法 
18     sj[n]=1;//标记 
19     q.push(n);
20     while(!q.empty())
21     {
22         string s=q.front();//取队头 
23         q.pop();
24         for(int i=0;i<s.size();i++)//一位一位看 
25         {
26             int num=s[i]-'0';//记录数字 
27             for(int j=0;j<v[num].size();j++)//看能不能变化 
28             {
29                 s[i]=v[num][j]+'0';//变化它 
30                 if(i==s.size()-1&&s[i]=='0')break;//特判最后一位变成0 
31                 if(!sj[s])//没找过 
32                 {
33                     sj[s]=1;//标记 
34                     ans++;//方案加一 
35                     q.push(s);//塞进队列 
36                 }
37                 s[i]=num+'0';//还原 
38             }
39         }
40     }
41     cout<<ans;//输出 
42     return 0;
43 }

 

posted @ 2019-07-14 15:25  华恋~韵  阅读(737)  评论(0编辑  收藏  举报