如何使用C++基于栈的深搜算法实现马踏棋盘
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍如何使用C++基于栈的深搜算法实现马踏棋盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!马踏棋盘(基于栈的深搜算法实现)简单来说,从任意指定方格出发,为马寻找一
千家信息网最后更新 2026年11月01日如何使用C++基于栈的深搜算法实现马踏棋盘
这篇文章主要介绍如何使用C++基于栈的深搜算法实现马踏棋盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
马踏棋盘(基于栈的深搜算法实现)
简单来说,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径,这就是马踏棋盘的简单描述。
#include#include #define M 8 //行#define N 8 //列 typedef struct snode //坐标{ int flag; int x; int y;}stack;typedef struct node { int top; //记录走了多少步top+1 int flag; //记录上一步走的方向 stack * p; //路径栈}LNode; LNode * CreateStacke(); //创建,并初始化void Judge(LNode * s, int chess[][N]); //判断往哪走void Push(LNode * s, stack x); //入栈操作void Pop(LNode * s); //出栈操作int IsFull(LNode * s); //判满int IsEmpty(LNode * s); //判空 int main(){ int chess[M][N] = {0}; //棋盘 int i, j; //循环变量 LNode * step; //step存的是走的路径 step = CreateStacke(); Judge(step, chess); for (i = 0; i < N; i++){ for (j = 0; j < M; j++){ printf("%2d ", chess[i][j]); } printf("\n"); } return 0;}LNode * CreateStacke(){ LNode * s = (LNode *)malloc(sizeof(LNode)); if (!s){ printf("内存空间不足!\n"); system("pause"); exit(0); } s->p = (stack *)malloc(sizeof(stack) * M * N); if (!s->p){ printf("内存空间不足!\n"); system("pause"); exit(0); } s->top = -1; // 把top放在栈底 return s;}void Judge(LNode * s, int chess[][N]) { int ch[8][2] = { //马可能走的八个方向 {1, -2}, { 2, -1}, {2, 1 }, { 1, 2 }, {-1, 2}, {-2, 1 }, {-2, -1},{-1, -2} }; int i, j = 1, flag = 1; stack t; printf("请输入马的初始位置:(%d * %d)\n", M, N); scanf("%d%d", &t.y, &t.x); if (t.x <= 0 || t.x > N || t.y <= 0 || t.y > N){ printf("输入的坐标超出范围!\n"); exit(0); } t.x--; t.y--; chess[t.y][t.x] = 1; //选择马的第一个落脚点 Push(s, t); while (s->top < M * N - 1 && s->top != -1){ for (i = 0; i < 8; i++){ t.x = s->p[s->top].x + ch[i][0]; t.y = s->p[s->top].y + ch[i][1]; //如果它的坐标没有超出范围,并且没有走过,则把该路线存入路径栈 if (t.x >= 0 && t.y >= 0 && t.x < N && t.y < M && !chess[t.y][t.x]){ if(flag){ //没有退回去 Push(s, t); chess[t.y][t.x] = s->top + 1; s->p[s->top - 1].flag = i; flag = 1; break; } else{ //退回去了 if (s->p[s->top].flag < i){ //重新走时,让它的方向不等于原先的方向 flag = 1; } } } } //如果没有能走的路时,即,所有的路径都超出范围,或者,该位置已经走过了,则,退到上一步,重新选择; if (i == 8){ chess[s->p[s->top].y][s->p[s->top].x] = 0; Pop(s); flag = 0; } }}void Push(LNode * s, stack x){ if (IsFull(s)){ printf("栈上溢,不能进行入栈操作!\n"); exit (0); } else{ s->top++; s->p[s->top] = x; }}void Pop(LNode * s){ if (IsEmpty(s)){ printf("栈为空,不能进行出栈操作!\n"); exit(0); } s->top--;}int IsFull(LNode * s){ if (s->top >= M * N){ return 1; } else{ return 0; }}int IsEmpty(LNode * s){ if (s->top == -1){ return 1; } else{ return 0; }}
以上是"如何使用C++基于栈的深搜算法实现马踏棋盘"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
棋盘
t.y
路径
t.x
算法
坐标
C++
内容
方向
篇文章
范围
输入
价值
位置
兴趣
内存
变量
小伙
小伙伴
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司简介
奇酷互联网科技
嘟嘟瓜互联网科技
互联网科技上市公司
科技互联网公司logo
互联网科技logo
丰台科技园 互联网公司
成都仁贤领冠互联网科技有限公司
央行互联网金融科技公司
欧洲十大科技互联网公司
消费医药和互联网科技
链环科技传统企业怎么转型互联网
深圳艾果互联网通讯科技
长沙互联网科技
恒生互联网科技业指数调整周期
厦门江牛科技互联网
互联网科技创新创业项目
互联网对科技影响
伍佰万互联网科技是干嘛的
互联网科技企业文化
互联网高科技
广州互联网科技公司
互联网金融与金融科技
青海省互联网新科技
济南和联互联网科技有限公司
开启互联网科技时代小说
移动互联网年度科技创新
企晟互联网信息科技有限公司
北京品多多互联网科技有限公司
平安好医生打造互联网科技医疗