首页 > 编程语言 >哨兵 查找算法_右手 深度

哨兵 查找算法_右手 深度

时间:2023-07-08 22:22:07浏览次数:55  
标签:10 dtype len 哨兵 算法 查找 np maze dir

 1 import numpy as np
 2 
 3 # 生成一个 10 *10 全为0的 array
 4 
 5 maze = np.zeros((10,10),dtype=int)
 6 # 给 array 使用 数字9包围
 7 # 添加行
 8 maze = np.insert(maze, 0, np.full(10,9,dtype=int), axis=0)
 9 maze = np.insert(maze, len(maze), np.full(10,9,dtype=int), axis=0)
10 # 插入列
11 maze = np.insert(maze, 0, np.full(12,9,dtype=int), axis=1)
12 maze = np.insert(maze, len(maze[0]), np.full(12,9,dtype=int), axis=1)
13 
14 # print(maze)
15 # array shape
16 print(np.shape(maze))
17 # 随机添加 数字9
18 for i in range(len(maze[0])):
19 for j in range(len(maze[0])):
20 if np.random.rand() >0.7:
21 maze[i][j] = 9
22 # 对第六行倒数第二个 数字改成1
23 maze[6][-2] = 1
24 
25 print(maze)
26 
27 '''
28 使用右手法则的深度优先查找进行搜索
29 将手挨着右侧的墙壁, 边扶着墙边移动的方法.当走到尽头碰壁了,只需要
30 向左转并继续重复这一操作即可
31 程序会保持前进的方向, 对右侧, 前面, 左侧, 后面 按顺序进行确认并
32 朝着前进方向移动
33 (当移动到未曾走过的位置时增加移动次数, 移动到已经走过的位置时
34 减少移动次数的方法, 可以实现最短路径查找)
35 '''
36 
37 # 指定右手法则中的移动方向(下, 右, 上, 左)
38 dir = [[1,0],[0,1],[-1,0],[0,-1]]
39 # 设置起点位置 (x坐标 y坐标 移动次数 方向)
40 x, y, depth, d = 1, 1, 0, 0
41 
42 while maze[x][y] !=1:
43 # 设置为已搜索
44 maze[x][y] ==2
45 
46 # 使用右手法则进行搜索
47 for i in range(len(dir)):
48 # 在前进方向的右侧开始按顺序进行搜索
49 j = (d+i-1)%len(dir)
50 if maze[x + dir[j][0]][y+dir[j][1]]<2:
51 # 遇到未曾走过的位置时, 前进并增加移动次数
52 x += dir[j][0]
53 y += dir[j][1]
54 d = j
55 depth +=1
56 break
57 elif maze[x + dir[j][0]][y+dir[j][1]] ==2:
58 # 遇到已经走过的位置时, 前进并减少移动次数
59 x += dir[j][0]
60 y += dir[j][1]
61 d = j
62 depth -= 1
63 break
64 print(depth)
65 print(maze)

 

标签:10,dtype,len,哨兵,算法,查找,np,maze,dir
From: https://www.cnblogs.com/dontbealarmedimwithyou/p/17538003.html

相关文章

  • Miller_Rabin算法快速判断大数是否为素数
    Miller_Rabin算法快速判断大数是否为素数并不是绝对,这只是一种判断大概率为素数的方法首先根据费马小定理有:\(a^{p-1}=1\pmodp(a不为p的倍数且p不是素数)\)又因为\(p\)为素奇数,所以\(p-1\)为偶数,表示为\(p-1=2^dm\)所以有\(a^{p-1}-1=0\pmodp\)\(a^{2^dm}-1=0\pmodp\)\((......
  • KMP算法
    一.引入(洛谷P3375)给出两个字符串\(s_1\)和\(s_2\),若\(s_1\)的区间\([l,r]\)子串与\(s_2\)完全相同,则称\(s_2\)在\(s_1\)中出现了,其出现位置为\(l\)。现在请你求出\(s_2\)在\(s_1\)中所有出现的位置。\(s1\)称为文本串,\(s2\)称为模板链二.简陋版本不难......
  • Pollard-Rho 分解算法学习笔记
    Pollard-Rho分解算法Pollard-Rho算法是一种用于快速找到\(n\)的一个非平凡约数的方法。生日悖论在不少于\(23\)个人中至少有两人生日相同的概率已经大于\(50\%\)。更一般的形式,随机选取在\(\left[1,N\right]\)范围内的整数,期望到第\(O(\sqrt{N})\)个出现重复。用下面的方......
  • 阵列信号处理及matlab仿真-------波束形成算法基础知识以及MMSE、MSNR和LCMV的MATLAB
    上一篇《阵列信号处理及MATLAB仿真-----阵列信号绪论》里面说了阵列信号处理研究的四个主要问题:波束形成技术、空间谱估计、信号源定位、信源分离。接下来我们就波束形成来做一个详细的学习。一、波束形成的定义:首先说一下它的物理意义,阵列天线的方向图是全方向的,但是......
  • 网络2️⃣HTTPS-密钥交换算法
    SSL/TLSHTTPS是在TCP和HTTP之间添加SSL/TLS安全协议,解决HTTP的安全性问题。在HTTP中,通信之前需要进行TLS握手。密钥交换算法:不同密钥交换算法的TLS握手流程不同。RSA:简单,但存在前向安全问题(如果服务端私钥泄漏,过去被第三方截获的所有TLS通讯密文都会被......
  • 【算法】根据二叉树的级别返回排序后的元素列表
    根据给定的Node树节点,返回包含按级别排序的树中元素的列表,这意味着根元素位于第一位,然后根子元素(从左到右)位于第二位和第三位,依此类推。1publicclassNode2{3publicNodeLeft;4publicNodeRight;5publicintValue;67publicNode(No......
  • 手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实
    手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、CypherCheetsheet详细教学等效果预览:1.知识图谱存储方式知识图谱存储方式主要包含资源描述框架(ResourceDescriptionFramework,RDF)和图数据库(GraphDatabase)。1.1资源描述框......
  • 二分法查找目标元素在数组中的索引
    /***给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,*如果目标值存在返回下标,否则返回-1。*输入:nums=[-1,0,3,5,9,12],target=9*输出:4*解释:9出现在nums中并且下标为4......
  • 查找多个字符串的正则表达式
    非元组捕获的语法为:(?:exp) 比如查找江浙沪包邮区:(?:浙江|上海|江苏) 元组的概念(待补充)Python中的元组Python中元组(Tuple)是一种特殊的列表,是Python中可以用于存储数据集合数据类型。它的特殊性是:元组是一个是有序的且不可改变的集合......
  • 42. 查找算法
    一、线性查找算法  线性查找是逐一比对,发现有相同值,就返回下标,否则返回-1。这里,我们实现的线性查找是找到一个满足条件的值就返回。/***@brief线性查找**@paramA待查找的数组*@paramN数组的长度*@paramvalue待查找的元素*@returnint如果找到返回......