1 条题解
-
0
C++ :
#include<cstdio> #include<iostream> #include<cstdlib> using namespace std; int book[6],c; bool flag[6],like[6][6]={{0,0,0,0,0,0},{0,0,0,1,1,0},{0,1,1,0,0,1}, {0,0,1,1,0,0},{0,0,0,0,1,0},{0,0,1,0,0,1}};; char s[5][20]={"Student Zhang","Student Wang","Student Liu","Student Sun","Student Li"}; int search(int); int print(); int main() { for (int i=1;i<=5;i=i+1) flag[i]=1; search(1); //从第1个开始选书,递归。 return 0; } int search(int i) //递归函数 { for (int j=1;j<=5; j++) //每个人都有5本书可选 if (flag[j]&&like[i][j]) //满足分书的条件 { flag[j]=0; //把被选中的书放入集合flag中,避免重复被选 book[i]=j; //保存第i个人选中的第j本书 if (i==5) print(); //i=5时,所有的人都分到书,输出结果 else search(i+1); //i<5时,继续递归分书 flag[j]=1; //回溯:把选中的书放回,产生其他分书的方案 book[i]=0; } return 0; } int print() { c=c+1; //方案数累加1 cout <<"answer " <<c <<":\n"; for (int i=1;i<=5;i=i+1) cout <<s[i-1]<<":" <<char(64+book[i]) <<endl; //输出分书的方案 return 0; }
- 1
信息
- ID
- 394
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者