关于回溯与夏令营
来来来,暑假准备到了哦,和老师一起去夏令营吧!
到分房间的时候了,小伙伴对各自的房间号都有要求,该怎么办呢?
这道题和之前的分工作的那题有得一拼(关于回溯与招聘市场),所以也用类似的方法处理一下就好了。
1.先是检查该房间是否已被分出还有该房间是否符合当前同学的喜好:
if((book[i]==0)&&(hobby[k][i]==1))
2.如果符合,就把房间给他;
3.然后一直按照该步骤持续直到所有的同学都领到了房间。
代码如下:
1 #include<stdio.h> 2 int hobby[5][5]={{0,0,1,1,0}/*第一个人的喜好*/, 3 {1,1,0,0,1}/*第二个人的喜好*/, 4 {0,1,1,0,0}/*第三个人的喜好*/, 5 {0,0,0,1,0}/*第四个人的喜好*/, 6 {0,1,0,0,1}/*第五个人的喜好*/}; 7 int book[5]={0}; 8 int ans[5]={0}; 9 void out(); 10 void f(int k); 11 int main() 12 { 13 f(0); 14 return 0; 15 } 16 void f(int k) 17 { 18 int i; 19 for(i=0;i<=4;i++) 20 { 21 if((book[i]==0)&&(hobby[k][i]==1)) 22 { 23 ans[k]=i; 24 book[i]=1; 25 if(k==4) 26 out(); 27 else 28 f(k+1); 29 book[i]=0; 30 } 31 } 32 } 33 void out() 34 { 35 int i; 36 for(i=0;i<=4;i++) 37 printf("%d:%d ",i+1,ans[i]+1); 38 printf("\n"); 39 }
代码如有不足,欢迎指教!