判断一个图是否存在Euler迹的算法之javascript

本次我们将整理一个之前在学习javascript中做过的一个小例子。
问题描述:求解本问题的灵感来源于图论课程上的一个作业题,要求是这样的:在一个44的方格相同的棋盘上跳动一只马,这只马能否连续的完成每一种可能的跳动恰好一次,其中马的跳动是指从一个长为3,宽为2的长方形的一脚跳到另一角。
解决问题的思路:以棋盘上的每一格看为一个点,马能跳动的两点 连一条边,最终判断得到的图是否存在欧拉迹。
所以,我们主要采取以下的方法解决问题:
(1)利用Canvas绘制棋盘,其中根据棋盘的宽度以及格子的个数确定棋盘中每一格的宽度,代码如下:
在这里插入图片描述
(2)声明一个函数caculatedegree(),用来计算棋盘上每一点存在多少中跳跃方式,也就是在这一点上有几种3
2的矩形能够跳跃,在本例中,我们将这种可能数存放在一个二维数组中:
在这里插入图片描述
实现这部分代码的时候,主要考虑的是在某一点上,假设它能跳到一个32的矩形的对角上,那么按照下一步的位置是否在棋盘上来决定最终该点的度是否加1。
(3)声明一个函数eulertrace(),判断某点的度构成的二维数组中,度数为奇数的点的个数是否小于等于2,如果不是,则肯定不存在这样的跳跃方式遍历所有的点(这是一个判断欧拉迹的条件)
在这里插入图片描述
(4)通过对棋盘添加onClick事件,可以初步实现这个小测试
在这里插入图片描述
最终,通过本次小例子,得到的效果如下:
在这里插入图片描述
也就是说4
4的棋盘上不能实现问题中的跳跃方式
此外,我们可以通过在棋盘上落子的方式检测结果,跳跃了三步之后的效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Yzaxdm/article/details/89665598