题目描述
学校放寒假时,信息学竞赛辅导老师有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;
}