学校放暑假时,信息学辅导教师有n本书要分给参加培训的n个学生。
如:A,B,C,D,E共5本书要分给参加培训的张、刘、王、李、孙5位学生,每人只能选1本。
教师事先让每个人将自己喜爱的书填写在如下的表中,然后根据他们填写的表来分配书本,希望设计一个程序帮助教师求出可能的分配方案,使每个学生都满意。
输入:
第一行一个数n(学生的个数,书的数量)
以下共n行,每行n个0或1(由空格隔开),第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 }