【算法设计】回溯法算法设计——骑士游历问题(C++实现)

编程入门 行业动态 更新时间:2024-10-27 11:28:03

【<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法设计】回溯法算法设计——骑士游历问题(C++实现)"/>

【算法设计】回溯法算法设计——骑士游历问题(C++实现)

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法分析与设计知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ


目录

  • 骑士游历问题
    • 问题描述
    • 算法思想和解题思路
    • C++代码

骑士游历问题

问题描述

在国际象棋的棋盘(8行×8列)上放置一个马,按照“马走日字”的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次。

若给定起始位置(x0,y0),编程探索出一条路径,沿着这条路径马能遍历棋盘上的所有单元格

算法思想和解题思路

马从棋盘上的某一初始位置(x0,y0)开始,每次选择一个方向k,向前走一格,直到走完64格为止。每走一格,设置数组中相应格的元素值为马走的步数。

如果选择的方向k=0,表示可能的8种走向都试探不通,不通的原因是走向超出了棋盘范围,或当前位置已经被马访问过。此时马已无路可走,说明前几步走得不对,应该退回去重新换一种走法。

C++代码

#include<iostream>
#include<iomanip>
using namespace std;
const int N = 8;
int travel[8][8] = { 0 };  
int record = 0; 
bool isVisited(int i, int j)
{if (travel[i][j] == 0) return false;else return true;
}
bool isCrossBorder(int i, int j) {if (i >= 0 && i < N && j >= 0 && j < N) return false;else return true;
}
void search(int x, int y) {if (record == N * N)  return;if (!isVisited(x, y) && !isCrossBorder(x, y)) {record++;travel[x][y] = record;search(x + 1, y + 2); search(x + 2, y + 1);search(x + 2, y - 1);search(x + 1, y - 2);search(x - 1, y - 2);search(x - 2, y - 1);search(x - 2, y + 1);search(x - 1, y + 2);return;}return;
}
int main() {int x,y;cout << "请输入起始点位置:";cin >> x;cin >> y;search(x, y);for (int row = 0; row < N; row++) {for (int column = 0; column < N; column++){cout << setw(2) << travel[row][column] << " ";}cout << endl;}return 0;
}


大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

更多推荐

【算法设计】回溯法算法设计——骑士游历问题(C++实现)

本文发布于:2023-11-15 17:52:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1603728.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   骑士

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!