学校放寒假时,我有A,B,C,D,E五本书,要分给参加培训的张、王、刘、孙、李五位同学,每人只能选一本书。
我事先让每个人将自己喜欢的书填写在如下的表格中。然后根据他们填写的表来分配书本,希望设计一个程序帮助我求出所有可能的分配方案,使每个学生都满意。
输入格式
输入五行,每行有五个数据,0表示不喜欢这本书,1表示喜欢这本书。
输出格式
如果没有可能的方案,输出0,否则按下面格式输出每一种方案。
answer x:
1: A
2: B
3: C
4: D
5: E
为啥输出全是0?正确的怎么写?
#include
using namespace std;
int a[10][10];
int vis[6];
int ans[6];
int t=0;
void print(){
t++;
cout<<"answer "<":"<for(int i=1;i<=5;i++){
cout<":";
switch(ans[i]){
case 1:cout<<"A"<break;
case 2:cout<<"B"<break;
case 3:cout<<"C"<break;
case 4:cout<<"D"<break;
case 5:cout<<"E"<break;
}
}
cout<void search(int step){
if(step==6){
print();
}
else{
for(int i=1;i<=5;i++){
if(!vis[i]&&a[step][i]){
ans[step]=i,vis[i]=1;
search(step+1);
vis[i]=0;
}
}
}
}
int main(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>a[i][j];
}
}
if(t==0){
cout<<"0"<return 0;
}
search(1);
return 0;
}
42行if(t==0)成立啊,t初始化为0了啊。那直接就return 0了,search函数根本不会执行
search(1);
要写在
if (t == 0)的前面。