zoukankan      html  css  js  c++  java
  • 分书 回溯搜索

    题目描述
    学校放寒假时,信息学竞赛辅导老师有A,B,C,D,E五本书,要分给参加培训的张、王、刘、孙、李五位同学,每人只能选一本书。老师事先让每个人将自己喜欢的书填写在如下的表格中。然后根据他们填写的表来分配书本,希望设计一个程序帮助老师求出所有可能的分配方案,使每个学生都满意。
    /*每个人选择的共同条件都是选择一本他喜欢但是没有被选的书
    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    bool book[6];
    int like[6][6]={{0,0,0,0,0,0},{0,0,0,1,1,0},{0,1,1,0,0,1},//每个人喜欢的书标记1
    {0,0,1,1,0,0},{0,0,0,0,1,0},{0,0,1,0,0,1}};;
    int people[6],js;//第几个人喜欢的书
    int search(int );
    int print();
    int main()
    {
    search(1);//从第一个开始分书
    return 0;
    }
    int search(int x)
    {
    for(int i=1;i<=5;i++)
    {
    if(!book[i]&&like[x][i])//第i本书没被选并且他喜欢
    {
    people[x]=i;//第x个人选第i本书
    book[i]=1;//第I本书被选
    if(x==5)print();
    else
    search(x+1);
    book[i]=0;//回溯
    people[x]=0;
    }
    }
    }
    int print()
    {
    js++;
    cout<<"answer: "<<js<<": ";
    for(int i=1;i<=5;i++)
    {
    cout<<i<<":"<<char(64+people[i])<<endl;
    }
    cout<<endl;
    }

  • 相关阅读:
    双向链表

    一个简单makefile
    内存管理
    队列
    postgresql表结构查询sql
    postgresql 命令
    NSMutableDictionary 中使用setValueForKey 和 setObjectForKey有什么区别?
    ViewController 生命周期
    程序启动过程
  • 原文地址:https://www.cnblogs.com/zzyh/p/6609436.html
Copyright © 2011-2022 走看看