关联数产生数(广搜版)

【题目描述】

关联数:给定一个数字x,然后给出 k 对关联关系,数字x可以通过给定的关系变换成另一个数字 
现在请问包括给定数字本身x,通过 接 者  最多可以变换出多少种不同的数字,并按照从小到大的顺序输出。

产生数:给出一个整数 n(n<=2000)和 k 个变换规则(k≤15)。 
规则:  
① 1个数字可以变换成另 1 个数字;  
② 规则中,右边的数字不能为零。  
求经过任意次的变换(0 次或多次),能产生出多少个不同的整数。仅要求输出不同整 数个数。  

【输入输出样例】

关联数{

输入:

5 6
1 3
3 9
5 1
1 9
7 12
12 6

输出:

1 3 5 9

}

产生数{

 输入:

234 
2 
2 5 
3 6 

 输出:

4

}

 

【源代码】

关联数:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[10010][2]; 
int visit[100010];
int k,n,ans,st;
void bfs(int x){
    queue q;
    q.push(x);
    visit[x]=1;
    while(!q.empty()){
        int f=q.front();
        q.pop();
        for(int i=1;i<=n;i++){
            if(a[i][0]==f&&!visit[a[i][1]]){
                visit[a[i][1]]=1;
                q.push(a[i][1]);
            }
        } 
    }
}
int main(){
     
    scanf("%d%d",&k,&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i][0],&a[i][1]);
    } 
    bfs(k);
    for(int i=0;i<=100000;i++){
        if(visit[i]){
            cout<         }
    }
 
 
 
    return 0;
}
//♂_The_LYH_25_♂

产生数:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[10010][2],visit[10010];
int x,n,ans=1;
int bfs(int x){
    memset(visit,0,sizeof(visit));
    int cnt=1;
    queueq;
    q.push(x);
    visit[x]=1;
    while(!q.empty()){
        int f=q.front();
        q.pop();
        for(int i=1;i<=n;i++){
            if(a[i][0]==f&&visit[a[i][1]]==0){
                cnt++;
                visit[a[i][1]]=1;
                q.push(a[i][1]);
            }
        }
    }
    return cnt;
}
int main(){
    cin>>x>>n;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i][0],&a[i][1]);
    }
    while(x){
        int g=x%10;
        ans*=bfs(g);
        x/=10;
    }
    cout<

    return 0;
}
//♂_The_LYH_25_♂


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部