C语言 8皇后解法

举报
陈言必行 发表于 2021/08/13 22:59:19 2021/08/13
【摘要】 //这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了 #include #define MAX 200#define Empty 0#define Full 1#define N 8unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的v...
//这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了


   
  1. #include
  2. #define MAX 200
  3. #define Empty 0
  4. #define Full 1
  5. #define N 8
  6. unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的
  7. void input(int i);
  8. int count = 0;
  9. int main()
  10. {
  11. input(0);
  12. getchar();
  13. return0;
  14. }
  15. void input(int i)
  16. {
  17. intx=0,y=0;
  18. intp=0,q=0;
  19. int flag =0;
  20. //初始化当前棋盘
  21. if(i!=0)
  22. {
  23. for(x=0;x
  24. {
  25. for(y=0;y
  26. {
  27. qipan[i][x][y] = qipan[i-1][x][y];
  28. }
  29. }
  30. }
  31. else
  32. {
  33. for(x=0;x
  34. {
  35. for(y=0;y
  36. {
  37. qipan[i][x][y] = MAX;
  38. }
  39. }
  40. }
  41. //递归结束
  42. if(i==N)
  43. {
  44. count++;
  45. for(x=0;x
  46. {
  47. for(y=0;y
  48. {
  49. printf("%d ",qipan[i-1][x][y]);
  50. }
  51. printf("\n");
  52. }
  53. printf("%d\n",count);
  54. return;
  55. }
  56. for(y=0;y
  57. {
  58. //找到空位
  59. if(qipan[i][i][y]==MAX)
  60. {
  61. //另其为1
  62. qipan[i][i][y] = 1;
  63. //前后左右上下都置为0
  64. for(p=0;p
  65. {
  66. for(q=0;q
  67. {
  68. if(q==y||p==i||(p-i)==(q-y)||(p-i)==(y-q))
  69. if(qipan[i][p][q] == MAX)
  70. qipan[i][p][q] = 0;
  71. }
  72. }
  73. if(flag != -1)
  74. {
  75. //找下一个
  76. input(i+1);
  77. }
  78. //将棋盘变回本层原样
  79. for(p=0;p
  80. {
  81. for(q=0;q
  82. {
  83. if(i!=0)
  84. qipan[i][p][q] = qipan[i-1][p][q];
  85. else
  86. qipan[i][p][q] = MAX;
  87. }
  88. }
  89. flag =0;
  90. }
  91. }
  92. //找不到空位结束
  93. return;
  94. }


文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76091295

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。