借书问题

学校放暑假时,信息学辅导教师有n本书要分给参加培训的n个学生。
如:ABCDE5本书要分给参加培训的张、刘、王、李、孙5位学生,每人只能选1本。
教师事先让每个人将自己喜爱的书填写在如下的表中,然后根据他们填写的表来分配书本,希望设计一个程序帮助教师求出可能的分配方案,使每个学生都满意。
 
输入:
第一行一个数n(学生的个数,书的数量)
以下共n行,每行n01(由空格隔开),第i行数据表示第i同学对所有书的喜爱情况。0表示不喜欢该书,1表示喜欢该书。
输出:
所有的分配方案,每种方案一行:依次输出每个学生分到的书号。
样例输入:
5
1 1 0 0 0
1 0 0 0 0
0 0 1 1 1
0 0 1 0 0
0 0 0 1 1
样例输出:
2 1 4 3 5
2 1 5 3 4
 
 1 #include <algorithm>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int n;
 7 bool map[1005][1005],judge[1005];
 8 int a[1005];
 9 
10 void DFS(int tot)
11 {
12     if(tot==n+1)
13     {
14         for(int i=1;i<=n;i++)
15             cout<<a[i]<<" ";
16             cout<<endl;
17         return ;
18     }
19     for(int i=1;i<=n;i++)
20     {
21         if(map[tot][i]&&!judge[i])
22         {
23             map[tot][i]=0,judge[i]=1;
24             a[tot]=i;
25             DFS(tot+1);
26             map[tot][i]=1,judge[i]=0;
27         }
28     }
29     return ;
30 }
31 
32 int main()
33 {
34     cin>>n;
35     for(int i=1;i<=n;i++)
36         for(int j=1;j<=n;j++)
37             cin>>map[i][j];
38     DFS(1);
39     
40     return 0;
41 }
练习深搜

 

 
posted @ 2017-03-24 21:54  Aptal丶  阅读(566)  评论(0编辑  收藏  举报