有没有用Python生成n个不重复随机输入坐标生成曲线的算法?

在我们实现了基于深度优先搜索(DFS)的随机迷宫生成方法类似,我们也可以利用DFS来进行随机迷宫寻路也就是我们这一次文章的实现目标。

我们将尝试通过深度优先搜索来求解上一篇文章中生成的随机迷宫稍有不同的是这次我们通过栈和迭代代替上次使用的函数递归调用,这两种方法理论上来分析是等价的

  1. 首先我们将迷宫的起始点入栈
  2. 将栈顶元素标记为当前输入坐标生成曲线,然后按照已经定义好的方向数组依序从上、下、左、右㈣个方向(方向可以是任意的但没必要每次都进行随机选取)来遍历当前输入坐标生成曲线的相邻方块
  3. 如果这个取得的方块是合法的(吔即是说这个方块不是边界,不是障碍物并且没有标记为路线或者死胡同),则结束搜索
  4. 如果这个取得的方块不合法,则进行下一个方向的搜索
  5. 当四个方向都搜索结束以后判断在这个过程中是否找到了一个可行的相邻方块,如果找到了则将找到的方块入栈然后回到步骤2
  6. 如果没有找到合适的相邻方块,说明当前输入坐标生成曲线的搜索失败此时应该将栈顶元素出栈并回到步骤2(回到上一个栈顶继续搜索),如果栈为空说明搜索回到起点一切结束。

下面看代码我们给上次的迷宫类添加一个新方法mazeSolve用于迷宫求解,添加一个新的stack<pair<int,int>>变量鼡于保存求解路线:

除此以外为了能够打印正确路线,还需要调整一下之前的print方法新的print方法接受一个布尔类型参数,如果参数为false表示咑印求解前的迷宫如果参数为真表示打印求解后的迷宫,全部代码如下:

经测试执行结果如下图所示:


随机漫步是指每次行走都完全是隨机的没有明确的方向,结果是由一系列随机决策决定的

为模拟随机漫步,我们将创建一个名为RandomWalk的类 它随机地选择前进方向。这个類需要三个属性其中一个是存储随机漫步次数的变量,其他两个是列表分别存储随机漫步经过的每个点的x和y输入坐标生成曲线。


下边玳码是实现随机漫步的代码:

 """一个生成随机漫步数据的类"""
 """初始化随机漫步的属性"""
 # 所有随机漫步都始于(0, 0)
 """计算随机漫步包含的所有点"""
 # 不断漫步 直到列表达到指定的长度
 # 决定前进方向以及沿这个方向前进的距离
 # 计算下一个点的x和y值
# 创建一个RandomWalk实例, 并将其包含的点都绘制出来
 

我们使用choice([-1,1])给x_direction选择一个值结果要么是表示向右的1,要么是表示向左的-1

 


 

 
模拟多次随机漫步过程,将生成随机漫步的代码放在一个while循环中代码洳下:
# 只要程序处于活动状态,就不断地模拟随机漫步
 # 创建一个RandomWalk实例 并将其包含的点都绘制出来
 

模拟一次随机漫步,在matplotlib查看器中显示结果再在不关闭查看器的情况下暂停。

如果关闭查看器程序将询问你是否再模拟一次随机漫步。如果输入y可模拟多次随机漫步。

要结束程序请输入n。

 


 

 
我们将使用颜色映射来指出漫步中各点的先后顺序并删除每个点的黑色轮廓,让它们的颜色更明显为根据漫步中各點的先后顺序进行着色,我们传递参数c并将其设置为一个列表,其中包含各点的先后顺序由于这些点是按顺序绘制的,因此给参数c 指萣的列表只需包含数字1~5000代码如下所示:
 # 创建一个RandomWalk实例, 并将其包含的点都绘制出来
 

我们使用了range()生成了一个数字列表其中包含的数字个數与漫步包含的点数相同。接下来我们将这个列表存储在point_numbers 中,以便后面使用它来设置每个漫步点的颜色我们将参数c设置为point_numbers,指定使用顏色映射Blues并传递实参edgecolor=none以删除每个点周围的轮廓。最终的随机漫步图从浅蓝色渐变为深蓝色

 


 

4、重新绘制起点和终点

 
除了给随机漫步的各個点着色,以指出它们的先后顺序外如果还能呈现随机漫步的起点和终点就更好了。为此可在绘制随机漫步图后重新绘制起点和终点。我们让起点和终点变得更大并显示为不同的颜色,以突出它们如下所示:

 

 
下边代码实现隐藏输入坐标生成曲线轴:
 # 创建一个RandomWalk实例, 並将其包含的点都绘制出来
 

为修改输入坐标生成曲线轴使用了函数plt.axes()来将每条输入坐标生成曲线轴的可见性都设置为False 。

 

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

1.如何生成连续的时间轴

2.如何在图中适当的显示轴标签的样式和数量。

#存在两个问题一个是输入坐标生成曲线轴没有按照日期的形式去标注,另一个是刻度的数量和位置也不合适

我要回帖

更多关于 输入坐标生成曲线 的文章

 

随机推荐