广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么实现骑士走棋盘算法
  • 395
分享到

C++怎么实现骑士走棋盘算法

2023-06-19 13:06:33 395人浏览 泡泡鱼
摘要

这篇“c++怎么实现骑士走棋盘算法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现骑士走棋盘算法”文章吧。1.问

这篇“c++怎么实现骑士走棋盘算法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现骑士走棋盘算法”文章吧。

1.问题描述

骑士旅游Knight tour在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋 棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置。

2.基本思路

骑士的走法,基本上可以用递回来解决,但是纯粹的递回在维度大时相当没有效率,一个聪明的解法由J.CWarnsdorff 在1823年提出, 简单地说,先将最难的位置走完,接下来的路就宽广了,骑士所想要的下一步,为下一不再 选 择时,所能走的步数最少的一步。使用这个方法,在不使用递回的情况下,可以有较高的机率找出走法(找不到走 的机率也是有的)

3.代码实现

#include <stdio.h> int pos[8][8] = { 0 }; int travel(int, int); int travel(int x, int y) { int i, j, k, l, m; int tmpX, tmpY; int count, min, tmp;  //骑士可走的八个方向(顺时针) int ktmoveX[8] = { 1, 2, 2, 1, -1, -2, -2, -1 }; int ktmoveY[8] = { -2, -1, 1, 2, 2, 1, -1, -2 };  //测试下一步坐标 int nextX[8] = { 0 }; int nextY[8] = { 0 };  //记录每个方向的出路的个数 int exists[8] = { 0 };  //起始用1标记位置 i = x; j = y; pos[i][j] = 1;  //遍历棋盘 for (m = 2; m <= 64; m++) {  //初始化八个方向出口个数  for (l = 0; l < 8; l++) {   exists[l] = 0;  }  l = 0; //计算可走方向       //试探八个方向  for (k = 0; k < 8; k++) {   tmpX = i + ktmoveX[k];   tmpY = j + ktmoveY[k];   //边界 跳过   if (tmpX < 0 || tmpY < 0 || tmpX>7 || tmpY>7) {    continue;   }   //可走 记录   if (pos[tmpX][tmpY] == 0) {    nextX[l] = tmpX;    nextY[l] = tmpY;    l++;    //可走方向加1   }  }  count = l;  //无路可走 返回  if (count == 0) {   return 0;   //一个方向可走 标记  }  else if (count == 1) {   min = 0;   //找出下个位置出路个数  }  else {   for (l = 0; l < count; l++) {    for (k = 0; k < 8; k++) {     tmpX = nextX[l] + ktmoveX[k];     tmpY = nextY[l] + ktmoveY[k];     if (tmpX < 0 || tmpY < 0 || tmpX>7 || tmpY>7) {      continue;     }     if (pos[tmpX][tmpY] == 0) {      exists[l]++;     }    }   }   //找出下个位置出路最少的方向   min = 0;   tmp = exists[0];   for (l = 0; l < count; l++) {    if (exists[l] < tmp) {     tmp = exists[l];     min = l;    }   }  }  //用序号标记走过的位置  i = nextX[min];  j = nextY[min];  pos[i][j] = m; } return 1;} int main(){ int i, j, startX, startY; while (1) {  printf("输入起始点:");  scanf("%d%d", &startX, &startY);  if (travel(startX, startY)) {   printf("游历完成!");  }  else {   printf("游历失败!");  }  for (i = 0; i < 8; i++) {   for (j = 0; j < 8; j++) {    printf("%2d ", pos[i][j]);   }   printf("");  }  printf(""); }  return 0;}

C++怎么实现骑士走棋盘算法

以上就是关于“C++怎么实现骑士走棋盘算法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。

--结束END--

本文标题: C++怎么实现骑士走棋盘算法

本文链接: https://www.lsjlt.com/news/296258.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现骑士走棋盘算法
    本文实例为大家分享了C++实现骑士走棋盘算法的具体代码,供大家参考,具体内容如下 1.问题描述 骑士旅游Knight tour在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已...
    99+
    2022-11-12
  • C++怎么实现骑士走棋盘算法
    这篇“C++怎么实现骑士走棋盘算法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现骑士走棋盘算法”文章吧。1.问...
    99+
    2023-06-19
  • C++实现马踏棋盘(骑士周游)
    马踏棋盘,用1枚马走遍棋盘。我用一个二维数组记录模拟的整个路径,x为列,y为行,以顺时针的方式寻找下一格,算法比较简单,就通过递归和循环回溯即可,就是如果是8*8的数组,最坏可能执行...
    99+
    2022-11-13
  • java实现马踏棋盘算法(骑士周游问题)
    骑士周游问题 在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。 解题思路 1、创建棋盘 chessBoard,是一个二维数组。2、将当前位置设置为已经访问,然后根据当...
    99+
    2022-11-13
  • C/C++实现马踏棋盘算法
    本文实例为大家分享了C/C++实现马踏棋盘的具体代码,供大家参考,具体内容如下 问题描述:将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按...
    99+
    2022-11-13
  • C++贪心算法实现马踏棋盘
    本文实例为大家分享了C++贪心算法实现马踏棋盘的具体代码,供大家参考,具体内容如下 算法实现流程: 步骤1:初始化马的位置(结构体horse {x, y}) 步骤2:确定马从当前点...
    99+
    2022-11-13
  • java怎么实现马踏棋盘算法
    本篇内容介绍了“java怎么实现马踏棋盘算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!马踏棋盘或骑士周游问题马踏棋盘算法也被称为骑士周游...
    99+
    2023-06-29
  • 如何使用C/C++实现马踏棋盘算法
    这篇文章主要介绍如何使用C/C++实现马踏棋盘算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下问题描述:将马随机放在国际象棋的8&times;8棋盘Board[0~7][0~7]的某个方格中,马...
    99+
    2023-06-29
  • C++算法设计之马踏棋盘的实现
    本文实例为大家分享了C++算法设计之马踏棋盘的具体代码,供大家参考,具体内容如下 (一)马踏棋盘经典算法描述:   (1)马踏棋盘是经典的程序设计问题之一,主要的解决方案有...
    99+
    2022-11-13
  • C语言怎么实现三子棋算法
    这篇文章主要介绍“C语言怎么实现三子棋算法”,在日常操作中,相信很多人在C语言怎么实现三子棋算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现三子棋算法”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • C++基于栈的深搜算法实现马踏棋盘
    马踏棋盘(基于栈的深搜算法实现) 简单来说,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径,这就是马踏棋盘的简单描述。 话不多说,代码如下,要是有什么不懂的地...
    99+
    2022-11-13
  • 怎么用C++代码实现马踏棋盘
    这篇文章主要讲解了“怎么用C++代码实现马踏棋盘”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C++代码实现马踏棋盘”吧!(一)马踏棋盘经典算法描述:  (1)马踏棋盘是经典...
    99+
    2023-06-29
  • Java实现马踏棋盘游戏算法的代码怎么写
    这篇文章主要介绍“Java实现马踏棋盘游戏算法的代码怎么写”,在日常操作中,相信很多人在Java实现马踏棋盘游戏算法的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java实现马踏棋盘游戏算法的代码...
    99+
    2023-06-29
  • python怎么实现五子棋算法
    本文小编为大家详细介绍“python怎么实现五子棋算法”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么实现五子棋算法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。if (j+4<n...
    99+
    2023-06-30
  • 如何使用C++基于栈的深搜算法实现马踏棋盘
    这篇文章主要介绍如何使用C++基于栈的深搜算法实现马踏棋盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!马踏棋盘(基于栈的深搜算法实现)简单来说,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条路径...
    99+
    2023-06-29
  • 怎么使用C++实现Dijkstra算法
    本篇内容介绍了“怎么使用C++实现Dijkstra算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体代码1.graph类graph类用于...
    99+
    2023-07-02
  • C++中怎么实现一个 kmp算法
    本篇文章给大家分享的是有关C++中怎么实现一个 kmp算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++ kmp算法模板参数说明const T *source 待匹配的字...
    99+
    2023-06-17
  • C++归并排序算法怎么实现
    这篇文章主要介绍“C++归并排序算法怎么实现”,在日常操作中,相信很多人在C++归并排序算法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++归并排序算法怎么实现”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-26
  • Dijkstra算法原理及C++怎么实现
    这篇文章主要介绍“Dijkstra算法原理及C++怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Dijkstra算法原理及C++怎么实现”文章能帮助大家解决问题。什么是最短路径问题如果从图中...
    99+
    2023-07-02
  • C#中Astar寻路算法怎么实现
    以下是一种基本的A*寻路算法的实现示例,可以用于C#语言:```csharpusing System;using System.Co...
    99+
    2023-09-22
    C#
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作