Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
35168 | byxx2023 | 【搜索与回溯】选书(例题) | C++ | 无测评数据 | 0 MS | 0 KB | 1272 | 2023-12-29 17:26:07 |
#include<bits/stdc++.h> using namespace std; /* 原来将fun函数中增加了v,但数组fy的数大于5,周围的数不一定是0,所以后面v==5不成立无法输出 */ int fy[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}}; int a[555]; bool c[555]; int sum=0; void che(int x)//判断书字母 { if(x==1) { printf("A\n"); } else if(x==2) { printf("B\n"); } else if(x==3) { printf("C\n"); } else if(x==4) { printf("D\n"); } else if(x==5) { printf("E\n"); } } void print()//输出 { printf("answer %d:\n",sum); printf("Student Zhang:"); che(a[1]); printf("Student Wang:"); che(a[2]); printf("Student Liu:"); che(a[3]); printf("Student Sun:"); che(a[4]); printf("Student Li:"); che(a[5]); } void fun(int k) { for(int i=1;i<=5;i++) { if(c[i]==false&&fy[k][i]==1)//保证第k个学生满意 { a[k]=i;//将第i个书赋值给第k个学生 c[i]=true;//标记 if(k==5)//人数达到 { sum+=1;//方案数增加 print(); } fun(k+1);//进行下个学生 c[i]=false;//取消标记 } } } int main() { fun(1); return 0; }