前言

马踏棋盘 概念在这,不做过多复述。

https://baike.sogou.com/v58959803.htm?fromTitle=马踏棋盘

思路是这样子的,一匹马有上面几种做法,然后进行尝试,然后回溯即可。

我的测试结果是没有用贪心用了 10分钟,用贪心 20秒不到。

正文

class Program
{
//棋盘列数
public static int X;
//棋盘行数
public static int Y;
//标志棋盘的各个位置是否被访问
private static bool[] visited;
//是否访问成功
private static bool finished; public static Point Override { get; private set; } static void Main(string[] args)
{
X = 8;
Y = 8;
int row = 1; //马儿初始位置的行,从1开始编号
int column = 1; //马儿初始位置的列,从1开始编号
//创建棋盘
int[,] chessboard = new int[X, Y];
visited = new bool[X * Y];//初始值都是false
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
traversalChessboard(chessboard, row - 1, column - 1, 1);
stopwatch.Stop();
for (int i = 0; i < X - 1; i++)
{
for (int j = 0; j < Y - 1; j++)
{
Console.Write(chessboard[i, j] + " ");
}
Console.WriteLine();
}
Console.Read();
} public static void traversalChessboard(int[,] chessboard, int row, int column, int step)
{
//Thread.Sleep(500);
//第几步
chessboard[row, column] = step;
Console.WriteLine("走x轴"+row+"y轴:"+column);
//表示这个点被访问了
visited[row * X + column] = true;
List<Point> ps = next(new Point(column, row));
sort(ps);
while (ps.Count != 0)
{
Point p = ps[0];
ps.Remove(p);
if (!visited[p.Y * X + p.X])
{
traversalChessboard(chessboard, p.Y, p.X, step + 1);
}
}
if (step < X * Y && !finished)
{
Console.WriteLine("重置x轴" + row + "y轴:" + column);
//如果没有完成回溯重置
chessboard[row,column] = 0;
visited[row * X + column] = false;
}
else
{
finished = true;
}
}
public class Point { public Point(int x,int y)
{
this.X = x;
this.Y = y;
}
public Point()
{ }
public int X
{
set;
get;
}
public int Y
{
set;
get;
}
} public static List<Point> next(Point curPoint)
{
List<Point> points = new List<Point>(); Point point6 = new Point();
//显示5位置
if ((point6.X = curPoint.X - 2) >= 0 && (point6.Y = curPoint.Y - 1) >= 0)
{
points.Add(point6);
}
Point point7 = new Point();
//显示6位置
if ((point7.X = curPoint.X - 1) >= 0 && (point7.Y = curPoint.Y - 2) >= 0)
{
points.Add(point7);
}
Point point8 = new Point();
//显示7位置
if ((point8.X = curPoint.X + 1) < X && (point8.Y = curPoint.Y - 2) >= 0)
{
points.Add(point8);
}
Point point1 = new Point();
//显示0位置
if ((point1.X = curPoint.X + 2) <X && (point1.Y = curPoint.Y - 1) >= 0)
{
points.Add(point1);
}
Point point2 = new Point();
//显示1位置
if ((point2.X = curPoint.X + 2) <X && (point2.Y = curPoint.Y + 1) < Y)
{
points.Add(point2);
}
Point point3 = new Point();
//显示2位置
if ((point3.X = curPoint.X + 1) <X && (point3.Y = curPoint.Y + 2) <Y)
{
points.Add(point3);
}
Point point4 = new Point();
//显示3位置
if ((point4.X = curPoint.X - 1) >= 0 && (point4.Y = curPoint.Y + 2) < Y)
{
points.Add(point4);
}
Point point5 = new Point();
//显示4位置
if ((point5.X = curPoint.X - 2) >= 0 && (point5.Y = curPoint.Y + 1) < Y)
{
points.Add(point5);
} return points;
}
//根据当前这个一步的所有的下一步的选择位置,进行非递减排序, 减少回溯的次数
public static void sort(List<Point> ps)
{
ps.Sort(new companer());
} public class companer : IComparer<Point>
{
public int Compare(Point x, Point y)
{
int count1 = next(x).Count;
//获取到o2的下一步的所有位置个数
int count2 = next(y).Count;
if (count1 < count2)
{
return -1;
}
else if (count1 == count2)
{
return 0;
}
else
{
return 1;
}
}
}
}

重新整理数据结构与算法(c#)——算法套马踏棋算法[三十三]的更多相关文章

  1. 马踏棋盘算法递归+回溯法实现 C语言

    r为矩阵的行,c为矩阵的列 将结果输出到当前目录下的results.txt. 结果将给出:1.是否存在路径使马可以按要求走遍所有的方格: 2.解的总数: 3.程序执行的时间: #include< ...

  2. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  3. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  4. 数据结构- 串的模式匹配算法:BF和 KMP算法

      数据结构- 串的模式匹配算法:BF和 KMP算法  Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字 ...

  5. C语言二级选择题考点汇总-数据结构与算法-【考点一】 什么是算法

      1.算法及其基本特征 算法是指对方案的准确描述,是解决问题的执行步骤. 算法不等于数学上的计算方法,也不等于程序.程序是算法的载体. 算法的基本特征如下: (1)可行性:步骤可实现,执行结果可达到 ...

  6. 深入浅出数据结构C语言版(2)——简要讨论算法的时间复杂度

    所谓算法的"时间复杂度",你可以将其理解为算法"要花费的时间量".比如说,让你用抹布(看成算法吧--)将家里完完全全打扫一遍大概要5个小时,那么你用抹布打扫家里 ...

  7. 【算法总结】强化学习部分基础算法总结(Q-learning DQN PG AC DDPG TD3)

    总结回顾一下近期学习的RL算法,并给部分实现算法整理了流程图.贴了代码. 1. value-based 基于价值的算法 基于价值算法是通过对agent所属的environment的状态或者状态动作对进 ...

  8. 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】

    最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...

  9. 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径

    自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...

  10. 人工智能: 自动寻路算法实现(四、D、D*算法)

    博客转载自:https://blog.csdn.net/kongbu0622/article/details/1871520 据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探 ...

随机推荐

  1. vue3自定义Hooks

    比较简单的小demo,直接上代码吧 ts使用defineComponent,setup()里面使用 Composition API 写法,逻辑块清晰,不用前后文查找,拒绝 spaghetti code ...

  2. Java实现对ES数据的新增,删除,修改,及合并

    Java实现对ES数据的新增,删除,修改,及合并 新增数据 代码: @Autowired private RestHighLevelClient client; /** * @description ...

  3. 使用FastWiki一分钟搭建公司的智能客服

    FastWiki 新UI介绍:基于React与LobeUI框架设计 FastWiki 最近引入了基于React的新UI,这是一个重大的更新.在设计新UI时,我们借鉴了LobeUI的框架,并且在接口调用 ...

  4. git 全局用户名改为英文,中文生成的git记录文件 不能有中文,现场反馈 git config user.name

    设置用户名和邮箱 git config --global user.name "username" git config --global user.email useremail ...

  5. Temporary notepad

    20230412 快速帮助手册 很牛的风格 https://devhints.io/vue 印记中国 https://docschina.org/ 前台本地存储数据 兼容 https://github ...

  6. python的软连接的操作方法

    详细:切换python的版本 cd /usr/bin/ ls -l python* sudo rm -rf python sudo ln -s /usr/bin/python3.7 /usr/bin/ ...

  7. HiSi 3516CV500 NNIE(Neural Network Inference Engine) 摸鱼记录(2) --- 模型生成及模型仿真(实例分析)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. 像使用stl一样使用线段树 ——AtCoder Library(转载https://zhuanlan.zhihu.com/p/459579152)

    地址:https://zhuanlan.zhihu.com/p/459579152 我这里翻译一下官方的文档. 首先需要满足几个性质. (注意 ∗ 是个操作,不是单纯的一个乘号) 1)操作满足结合律 ...

  9. CAST电子部单片机方向授课——串口通信 预习文档

    CAST电子部单片机方向授课--串口通信 预习文档 课前小准备 安装串口调试助手 第一步:进入Microsoft Store 第二步:在Microsoft Store中搜索 "串口调试助手& ...

  10. Android 经典笔记之七:CountDownTimer解读

    CountDownTimer(倒计时计数器) 1.1 介绍 1.2 参数 1.3 公共方法 1.4 使用方法 1.5 源码分析 **0.本人写的综合案例**[案例](https://github.co ...