比赛 20140713下午练习 评测结果 RRRTTTTRTT
题目名称 跳棋的挑战 最终得分 0
用户昵称 St.Burning\ 运行时间 6.394 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-07-13 16:57:43
显示代码纯文本
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4.  
  5. #define MAXN 17
  6. #define x 14
  7. #define cycle(i,a,b) for(int i=a;i<=b;i++)
  8. using namespace std;
  9.  
  10. int N,Ans=0;
  11. int Map[MAXN],zs_yx[MAXN],ys_zx[MAXN];
  12. int seat[MAXN];
  13.  
  14. void Dfs(int,int [],int [],int [],int []);
  15.  
  16. int main()
  17. {
  18. freopen("checker.in","r",stdin);
  19. freopen("checher.out","w",stdout);
  20. memset(Map,0,sizeof(Map));
  21. memset(seat,0,sizeof(seat));
  22. memset(zs_yx,0,sizeof(zs_yx));
  23. memset(ys_zx,0,sizeof(ys_zx));
  24. cin>>N;
  25.  
  26. Dfs(1,seat,Map,zs_yx,ys_zx);
  27. cout<<Ans;
  28. return 0;
  29. }
  30.  
  31. void Dfs(int num, int seat[], int Map[], int zs_yx[], int ys_zx[])
  32. {
  33. if(num==N)
  34. {
  35. Ans++;
  36. if(Ans<=3)
  37. {
  38. cycle(i,1,N) cout<<seat[i]<<" ";
  39. cout<<endl;
  40. }
  41. return;
  42. }
  43. cycle(i,1,N)
  44. {
  45. if(Map[i]==0&&zs_yx[i-N+x]==0&&ys_zx[i+N]==0)
  46. {
  47. Map[i]==1;
  48. zs_yx[i-N+x]==1;
  49. ys_zx[i+N]==1;
  50. seat[num]=i;
  51. Dfs(num+1,seat,Map,zs_yx,ys_zx);
  52. }
  53. }
  54. return;
  55. }