美文网首页
选书(深搜)

选书(深搜)

作者: 番薯夹islandfsj | 来源:发表于2018-09-17 23:21 被阅读0次

问题描述

n个同学分n本书,每个人都有自己喜欢的书(即a[i][j]==1),求出所有的分配方案

#include<iostream> 
#include<string>

using namespace std;

string name[25];//n个学生的名字 ,用于读入 
int c,n;//c记录可能的情况的个数,用于输出 
int flag[25],book[25],a[25][25];//flag记录第i本书是否被分,book记录第i个学生分到的书,a数组如题

void printx(){
    cout<<"answer"<<c<<":"<<endl;
    for (int i=1;i<n;i++){
        char ch=64+book[i]; 
        cout<<name[i]<<":"<<ch<<endl;
    }
}//输出第c种可能的情况 

void tried(int step){
    if (step==n+1){
        printx();
        return;
    }//所有人都分配过了就输出这种情况 
    for(int i=1;i<=n;i++){
        if(a[step][i]==1&&flag[i]==0){//第step个人对第i本书有兴趣,且第i本书没被分 
            flag[i]=1;
            book[step]=i;//记录
            tried(step+1);//递归
            flag[i]=0;
            book[step]=0;//回溯 
        }
    }
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
      flag[i]=0;//初始化flag数组,要养成这个习惯
    for(int i=1;i<=n;i++)
      cin>>name[i];//输入学生姓名 
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        cin>>a[i][j];
    tried(1);//从第一个学生开始分书
    return 0; 
}

相关文章

  • 选书(深搜)

    问题描述 n个同学分n本书,每个人都有自己喜欢的书(即a[i][j]==1),求出所有的分配方案

  • CCF201512-3 画图(Java)

    深搜会爆栈的一道题(90分),宽搜可以过(100分) 深搜代码

  • 大概来错了时候

    最开始选择简书是为了想找个地方写写东西,也看看别人和我报一样心态的人写写东西,于是在知乎里搜了搜答案,千挑万选选了...

  • 邮局(深搜+剪枝)

    题目如下: 这道题使用的方法是剪枝+深搜。解题步骤在于:先设定一个邮局是已确定的,得出所有的村民到该邮局的距离。再...

  • DFS(深搜)算法

    深度优先搜索算法(Depth-First-Search):是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的...

  • 16-图的深搜和广搜二

    图的深搜和广搜 前面一篇是利用深搜和广搜进行图的顶点的遍历,今天我们则是根据起点和终点位置进行路径的搜索。 图的深...

  • 搜书

    近日找几本电子书找得心累,总结一下我遇到的可以找电子书的网站。 零、Google、百度 这种搜索引擎总会用吧? 一...

  • 深度搜索与回溯

    深度搜索与回溯法的区别 回溯法 = 深搜 + 剪枝。一般大家用深搜时,或多或少都会剪枝。深搜一般用递归实现,比较简...

  • od ce找数据总结

    一、找点击选怪物call以及选怪状态标志 1、ce搜未知数据,选择一个怪,搜变动,换一个,再搜变动,最后找到最像的...

  • Chapter1——搜索——深搜

    1. 题目列表 POJ1753(状态空间思想,简单深搜) POJ2965(同1753) POJ1573(深搜遍历 ...

网友评论

      本文标题:选书(深搜)

      本文链接:https://www.haomeiwen.com/subject/zkgdnftx.html