博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
国际马的跳法
阅读量:6306 次
发布时间:2019-06-22

本文共 1182 字,大约阅读时间需要 3 分钟。

问题:国际象棋的棋盘上,马从左上角跳到跳到右下角,总共有几种跳法。

这个问题与中国象棋的棋盘上的跳马问题完全相同,只是起始和终止坐标的不同。但是,可以比较一下所有跳法的数量,了解问题复杂度的差异。

求所有跳法,需要用穷尽搜索,试探法即回溯法是首选。

程序中,以左上角坐标为(0,0),马从左上角(0,0)跳到右下角(7,7)。

马在某个位置,一般而言有8种跳法,但是由于规定只能往右跳,所以只有4种跳法。同时如果跳出棋盘外则回溯。

为了在马跳到目的地后输出结果,使用堆栈存储马跳的轨迹。

总共有18种跳法。与中国象棋半张棋盘上37种跳法相比,可以说中国象棋问题的复杂度更高。

/* * * 问题描述:国际象棋的棋盘上,一匹马从左上角跳到右下角,只允许往右跳, * 给出各种跳法。 * * 国际象棋跳马问题算法程序 * */#include 
#define STACK_SIZE 100struct stack { int row; int col;} stack[STACK_SIZE];int ps = 0;int count = 0;void horse(int row, int col);void push(int row, int col);void pop();void output_result();int main(void){ horse(0, 0); return 0;}void horse(int row, int col) { push(row, col); if(row == 7 && col == 7) output_result(); if(row < 0 || row > 7 || col > 7) { ; } else { horse(row - 2, col + 1); horse(row - 1, col + 2); horse(row + 1, col + 2); horse(row + 2, col + 1); } pop();}void push(int row, int col) { stack[ps].row = row; stack[ps].col = col; ps++;}void pop() { ps--;}void output_result() { count++; int i; printf("result %d\n", count); for(i=0; i

转载于:https://www.cnblogs.com/tigerisland/p/7564956.html

你可能感兴趣的文章
IIS 发布网站遇到的问题
查看>>
NuGet学习笔记(2)——使用图形化界面打包自己的类库
查看>>
xcode中没有autoSizing的设置
查看>>
字符编码
查看>>
企业应用:应用层查询接口设计
查看>>
浅谈Excel开发:十 Excel 开发中与线程相关的若干问题
查看>>
nfd指令的详细说明
查看>>
安装VisualSvn Server时遇到的问题
查看>>
不用Visual Studio,5分钟轻松实现一张报表
查看>>
人脸识别 开放书籍 下载地址
查看>>
Notepad++配置Python开发环境
查看>>
用户组概念 和 挂载 概念
查看>>
如何快速获取ADO连接字符串
查看>>
AspNetPager控件的最基本用法
查看>>
sessionKey
查看>>
高性能Javascript--脚本的无阻塞加载策略
查看>>
Java 编程的动态性, 第4部分: 用 Javassist 进行类转换--转载
查看>>
完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
查看>>
iOS8 Push Notifications
查看>>
各大名企笔试及面经大全(程序猿必读)
查看>>