【题目如下】 【代码详情】 /******************************************************** /* 程 序 名:分书问题 /* 作 者:为了娶个美女老婆而AC /* 编程时间:2009年8月2日 /* 主要功能:递归算法的实现 *********************************************************/ #include<iostream> using namespace std;//编译命令 int n=0,take[5]={0};//定义全局变量,n代表方案数,take[i]=j表示将第j本书分给i int like[5][5]={{0,0,1,1,0},{1,1,0,0,1},{0,1,1,0,1},{0,0,0,1,0},{0,1,0,0,1}};//表示5分别喜欢哪本书 int book[5]={0};//记录5本书是否被分出去,0表示没分配,1表示已分配 void Try(int i)//建立递归函数,i表示第i个人 { int j,k;//定义变量 for(j=0; j<5; j++)//循环开始 { if(like[i][j]==1 && book[j]==0)//如果i这个人喜欢j这本书,并且j书还没被分出去 { take[i]=j;//记录将j书分给i book[j]=1;//记录j书已被分配 if(i==4)//如果都分完了,就输出这种方案 { n++;//将方案数加1 cout<<"第"<<n<<"种方案:/n"; for(k=0; k<5; k++)//将这种方案的记录输出 { cout<<take[k]<<"号书分给"<<char(k+65)<<endl; } cout<<endl;//换行 } else { Try(i+1);//如果还没分配完,就继续给下一个人分书 } book[j]=0;//如果j书分不出去,就将j书记录改成没分配,回溯,试下本书方案 } } } int main() { //主函数开始 int n=0;//方案数清0 Try(0);//调用递归函数,从第0个人试起 return 0;//主函数结束 } 【运行结果】