分书 回溯搜索
題目描述 學校放寒假時,信息學競賽輔導老師有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<<":\n";
for(int i=1;i<=5;i++)
{
cout<<i<<":"<<char(64+people[i])<<endl;
}
cout<<endl;
}
轉載于:https://www.cnblogs.com/zzyh/p/6609436.html
總結
- 上一篇: react+redux使用static
- 下一篇: Linux进入单用户模式(passwd