在国际棋盘上使一个骑士遍历所有的格子一遍且仅一遍,对于任意给定的顶点,
输出一条符合上述要求的路径。
#include<iostream>
#include<iomanip>
using namespace std;
const int N = 8; //棋盘维数
int travel[8][8] = { 0 };  //记录骑士的游历过程,如果是0未被访问,否则为骑士到达该点走的步数
int record = 0;  //计数器记录步数
/*Function:判断该点是否被访问过Param:int i行数 int j 列数return:true 访问过,false 未被访问过*/
bool isVisited(int i, int j)
{if (travel[i][j] == 0)return false;elsereturn true;
}
/*Function:判断该点是否越界Param:int i 行数  int j 列数return:true 越界 ,false 没越界*/
bool isCrossBorder(int i, int j) {if (i >= 0 && i < N && j >= 0 && j < N)return false;elsereturn true;
}
/*Function:搜索骑士可以走的点Param:int i 点的行数     int j 点的列数*/
void search(int i, int j) {if (record == N * N)  //所有位置都遍历过了,结束        return;if (!isVisited(i, j) && !isCrossBorder(i, j)) {record++;travel[i][j] = record;cout << "第" << record << "步到达" << "(" << i << "," << j << ")" << endl;search(i + 1, j + 2);  //递归调用,从八个方向中找出下一个可走的点        search(i + 2, j + 1);search(i + 2, j - 1);search(i + 1, j - 2);search(i - 1, j - 2);search(i - 2, j - 1);search(i - 2, j + 1);search(i - 1, j + 2);return;}return;
}
int main() {int i;    int j;cout << "请输入骑士起始的点位置" << endl;cout << "行数:";cin >> i;cout << "列数:";cin >> j;if (i < 0 || i >= N || j < 0 || j >= N){cout << "数据输入有误!";exit(0);}search(i, j);cout << "平面图" << endl;for (int row = 0; row < N; row++) {for (int column = 0; column < N; column++){cout << setw(2) << travel[row][column] << " ";}cout << endl;}return 0;
}
//算法思想:经过查阅,骑士在棋盘上的走法为“日”字,即有八个可以走的方向。定义数组用来保存骑士走过的路径:如果骑士没有到过该点,这一点的值为0,否则为骑士到达该点时的步数。给定骑士的起始位置,依次按照八个方向走(要判断骑士走的点是否越界),如果全部遍历完成,返回;否则继续找可以走的方向(采用递归调用函数的方式)。
//用到了DFS的算法思想。

实验一:骑士游历问题(国际象棋)相关推荐

  1. java编写类骑士游历_java课程设计骑士游历程序的开发

    java课程设计骑士游历程序的开发 JAVA程序设计 课程设计报告 课 题: 骑士游历程序的开发 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 2013.06.10 评阅意见: ...

  2. DFS(二):骑士游历问题

    在国际象棋的棋盘(8行×8列)上放置一个马,按照"马走日字"的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次.例如,下图给出了骑士从坐标(1,5)出发,游历棋盘的一种 ...

  3. c语言骑士游历优化算法,骑士游历、骑士巡游(C语言)课程设计.doc

    存档资料 成绩: 华东交通大学理工学院 课 程 设 计 报 告 书 所属课程名称 数据结构 题 目 骑士游历 分 院 专业班级 学 号 学生姓名 黄锦辉 指导教师 2012 年 6月 15 日 目 录 ...

  4. 算法作业04(回溯与分支界限算法)(骑士游历与行列变换问题)

    1.骑士游历问题 问题描述: 在国际象棋的棋盘(8行×8列)上放置一个马,按照"马走日字"的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次.若给定起始位置(x0,y0 ...

  5. java编写类骑士游历_[基于Java的骑士游历问题的预见算法]骑士游历问题

    摘要:骑士游历问题是经典的NP问题.在骑士游历问题常规算法的基础上,提出一个新的算法――预见算法,用Java实现该算法,提高程序的运行效率. 关键词:骑士游历:预见:Java算法 1 骑士游历问题 在 ...

  6. 骑士游历数组任意起点c语言,DFS(二):骑士游历问题

    在国际象棋的棋盘(8行×8列)上放置一个马,按照"马走日字"的规则,马要遍历棋盘,即到达棋盘上的每一格,并且每格只到达一次.例如,下图给出了骑士从坐标(1,5)出发,游历棋盘的一种 ...

  7. 骑士游历数组任意起点c语言,java课程设计骑士游历程序的开发

    <java课程设计骑士游历程序的开发>由会员分享,可在线阅读,更多相关<java课程设计骑士游历程序的开发(25页珍藏版)>请在人人文库网上搜索. 1.JAVA程序设计 课程设 ...

  8. 骑士游历问题(马踏棋盘)解析(c++)

    骑士游历问题:在国际棋盘上使一个骑士遍历所有的格子一遍且仅一遍,对于任意给定的顶点,输出一条符合上述要求的路径 解题思路: 这是一道经典的遍历问题(DFS),由于题目要求遍历全部,那么肯定要做标记,因 ...

  9. 【深搜】骑士游历(二)

    骑士游历(二) 问题描述:设有一个n×n的棋盘(n≤10),在棋盘上的任意一点A(x,y)有一中国象棋<马>,<马>走的规则同前,但取消<马>只能向右走的条件.试找 ...

  10. 【深搜】骑士游历(ssl 1277)

    骑士游历 Description 如下图所示有m*n(n,m<=15)一个棋盘,在棋盘左下角的A(1,1)点,有一个中国象棋〈马〉,并约定马走的规则: ①走日字:②只能向右走. Sample I ...

最新文章

  1. 高斯计磁场测试仪磁力检测仪磁场测磁仪手持磁通计特斯拉计TD8620
  2. python 曲线多项式拟合
  3. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机...
  4. win 7中修改Hosts方法
  5. python的matplotlib生成colorbar
  6. 【转载】javascript,声明变量和导入时,大括号的特殊用法
  7. 在 Microsoft word中插入代码
  8. 自学python能干些什么副业-学会Python有哪些可以做的兼职?
  9. 机器学习分类问题中_训练数据类别不均衡怎么解决
  10. 美国邮编大全及邮政编码规范
  11. iPhone提示“软件更新失败”下载时出错怎么办?教你解决!
  12. 计算机图形学-直线裁剪算法
  13. MySql中的行锁和表锁的理解
  14. 知轩藏书 书籍 评分 的爬虫
  15. 良基、归纳法、动态规划
  16. HTML中spry菜单栏,DreamweaverCS3中用“spry菜单栏”制作纵向导航菜单.docx
  17. JMETER进行REST API测试(分步指南)
  18. 新人学Kungfu功夫开源量化,应该这样入手
  19. Uinux/linux vi保存退出命令 (如何退出vi)
  20. 要做差异性分析,如何选择正确的统计方法?

热门文章

  1. iOS VoIP电话:CallKit与PushKit的应用
  2. 飞速流量压缩仪app v2.2.0官方iphone版
  3. 员工满意度调查表第一部分,对工作回报的满意度25题
  4. playwright python版本学习五-->locator常用定位总结
  5. Spring ServiceLocator 介绍及应用
  6. 6个闻所未闻的微信小程序,关键时候一定能够帮上你大忙!
  7. html 滚动条 scrolltop scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
  8. 【Dear Imgui】组件的使用之Text
  9. 易联云 k4 php对接,设置内置语音接口
  10. 在计算机上打印机,电脑打印机在哪里找出来