码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构--5.2马踏棋盘算法(骑士周游问题)


    题目渊源:

            马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。

    题目要求:

            国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。

            

    1. #include
    2. #include
    3. #define X 8
    4. #define Y 8
    5. int chess[X][Y];
    6. //找到基于(x,y)位置的下一个可走的位置
    7. int nextxy(int *x,int *y,int count)
    8. {
    9. switch(count)
    10. {
    11. case 0:
    12. if(*x+2<=X-1 && *y-1>=0 && chess[*x+2][*y-1]==0)
    13. {
    14. *y+=2;
    15. *y-=1;
    16. return 1;
    17. }
    18. break;
    19. case 1:
    20. if(*x+2<=X-1 && *y+1<=Y-1 && chess[*x+2][*y+1]==0 )
    21. {
    22. *x+=2;
    23. *y+=1;
    24. return 1;
    25. }
    26. break;
    27. case 2:
    28. if(*x+1<=X-1 && *y-2>=0 && chess[*x+1][*y-2]==0 )
    29. {
    30. *x=*x+1;
    31. *y=*y-2;
    32. return 1;
    33. }
    34. break;
    35. case 3:
    36. if(*x+1<=X-1 && *y+2<=Y-1 && chess[*x+1][*y+2]==0)
    37. {
    38. *x = *x+1;
    39. *y= *y+2;
    40. return 1;
    41. }
    42. break;
    43. case 4:
    44. if(*x-2>=0 && *y-1>=0 && chess[*x-2][*y-1]==0)
    45. {
    46. *x= *x-2;
    47. *y= *y+1;
    48. return 1;
    49. }
    50. break;
    51. case 5:
    52. if(*x-2>=0 && *y+1<=Y-1 && chess[*x-2][*y+1]==0 )
    53. {
    54. *x= *x-2;
    55. *y = *y+1;
    56. return 1;
    57. }
    58. break;
    59. case 6:
    60. if(*x-1>=0 && *y-2>=0 && chess[*x-1][*y-2]==0)
    61. {
    62. *x = *x - 1;
    63. *y = *y - 2;
    64. return 1;
    65. }
    66. break;
    67. case 7:
    68. if(*x-1>=0 && *y+2<=Y-1 && chess[*x-1][*y+2]==0)
    69. {
    70. *x = *x -1;
    71. *y = *y +2;
    72. return 1;
    73. }
    74. break;
    75. default:
    76. break;
    77. }
    78. return 0;
    79. }
    80. void print()
    81. {
    82. int i,j;
    83. for(i=0;i
    84. {
    85. for(j=0;j
    86. {
    87. printf("%2d\t",chess[i][j]);
    88. }
    89. printf("\n");
    90. }
    91. printf("\n");
    92. }
    93. //深度优先遍历棋盘
    94. //(x,y)为位置坐标
    95. //tag是标记变量
    96. int TravelChessBoard(int x,int y,int tag)
    97. {
    98. int x1= x,y1=y,count =0,flag =0;
    99. chess[x][y] = tag;
    100. if(x*Y == tag)
    101. {
    102. //打印棋盘
    103. print();
    104. return 1;
    105. }
    106. //找到马的下一个可走的坐标(x1,y1)
    107. flag = nextxy(&x1,&y1,count);
    108. while(0==flag && count<7)
    109. {
    110. count++;
    111. }
    112. while(flag)
    113. {
    114. if(TravelChessBoard(x1,y1,tag+1))
    115. {
    116. return 1;
    117. }
    118. //出现意外,找到马的下一步可走坐标(x1,y1)
    119. x1=x;
    120. y1=y;
    121. count++;
    122. flag = nextxy(&x1,&y1,count);
    123. while(0==flag && count < 7)
    124. {
    125. count++;
    126. flag = nextxy(&x1,&y1,count);
    127. }
    128. }
    129. if(0 == flag)
    130. {
    131. chess[x][y] =0;
    132. }
    133. return 0;
    134. }
    135. int main()
    136. {
    137. int i,j;
    138. clock_t start,finish;
    139. start = clock();
    140. for(i=0;i
    141. {
    142. for(j=0;j
    143. {
    144. chess[i][j]=0;
    145. }
    146. }
    147. if(TravelChessBoard(2,0,1))
    148. {
    149. printf("抱歉,马踏棋盘失败!\n");
    150. }
    151. finish = clock();
    152. printf("\n本次计算一共耗时:%f秒\n\n",(double)(finish - start)/CLOCKS_PER_SEC);
    153. return 0;
    154. }

  • 相关阅读:
    安科瑞无线物联网智能电表ADW300指导性技术要求-Susie 周
    Spring Security进行权限控制
    Flutter开发 - 监听滑动列表(解决特殊列表严重占用内存问题),并在滑动时暂停动画,暂停还未完成的下载操作,列表停止后恢复
    Linux简单命令学习 -- useradd passwd userdel
    基于FPGA的OV7670摄像头实时检测
    Java基础--》做个简易的计算器
    React 组件实例的三大核心—refs
    【0235】修改私有内存(private memory)中的MyBEEntry时,st_changecount值前后变化
    如何保护SpringBoot配置文件中的敏感信息
    Docker下Jenkins打包java项目并部署
  • 原文地址:https://blog.csdn.net/ww1425408527/article/details/132603467
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号