老鼠走迷宫的算法分析

合集下载

哈工大数据结构大作业——迷宫老鼠

哈工大数据结构大作业——迷宫老鼠

一、问题描述一个迷宫可用上图所示方阵[m,n]表示,0表示能通过,1 表示不能通过。

现假设老鼠从左上角[1,1]进入迷宫,编写算法,寻求一条从右下角[m,n] 出去的路径。

0 1 1 1 1 1 0 0 0 00 0 0 0 0 1 0 1 0 00 0 0 0 0 1 0 0 0 00 1 0 1 0 1 0 1 1 00 1 0 1 0 1 0 1 0 00 1 1 1 0 1 0 1 0 10 1 0 0 0 1 0 1 0 10 1 0 0 1 1 0 1 0 11 0 0 0 0 0 0 1 0 00 0 0 0 0 1 1 1 0 0二、方法思路1.关于迷宫1.1迷宫用而为动态数组实现。

maze[i,j](1≤i≤m, 1≤j≤n),maze是m行n列的迷宫,为了消除边界判断,把二维数组maze[1:m][1:n]扩大为maze[0:m+1][0:n+1],且令0行、0列、m+1行、m+1列的值为1,表示周围是围墙。

1.2起点maze[1][1]置0,终点maze[m-2][n-2]置0。

2.主导思想2.1.判断走下一步的依据是在迷宫的范围内坐标是否为空。

压栈以记录行走路线。

2.2若走到死路,则弹栈进入上一步,再次判断周围是否有可走位置。

3.具体算法3.1如果四周有路if(w[ii-1][jj]*w[ii+1][jj]*w[ii][jj-1]*w[ii][jj+1]==0),则老鼠按照下右左上的次序进行选择,如果满足空的条件,则压栈,并将走过的路线置2.if(0==w[ii+1][jj]){Push(ii,jj,Q);w[ii][jj]=2;ii++;}else if(0==w[ii][jj+1]){Push(ii,jj,Q);w[ii][jj]=2;jj++;}else if(0==w[ii][jj-1]){Push(ii,jj,Q);w[ii][jj]=2;jj--;}else{Push(ii,jj,Q);w[ii][jj]=2;ii--;3.2.若起点四周都没路,或返回至起点四周没路elseif(w[ii-1][jj]+w[ii+1][jj]+w[ii][jj-1]+w[ii][jj+1]==4),则结束程序。

电脑鼠的迷宫演算法

电脑鼠的迷宫演算法
電腦鼠的迷宮演算法
班級:四技系統三甲 組員:49839033葉家宏 49839056黃致中 指導老師:黎靖
摘要
•如果把電腦鼠比喻成人來看,那硬體就是四肢, 而軟體就相當於電腦鼠的大腦。在此報告中討論 兩種路徑演算,兩種皆可再細分很多種演算法。
• 區域性演算法
又分為右手法則、左手法則、中左法則、中右法則、 向心法則。
• 演算法則有洪水填充法(Flood-Fill algorithm)及A*演算法與 其諸多的變形演算法等。
選擇你想搜尋的演算法
右手法則
區域性演算法
左手法則 中左法則 中右法則 向心法則
全域性演算法
洪水填充法 A*演算法
右手法則
• 電腦鼠遇到岔路時,以右手為優先,其次直線、左手。
右手法則-迷宮範例
圖11
選擇F值較小的E6為下一步
A*演算法(13/15)
• 全域性演算法
又分為洪水演算法、A*演算法。
區域性演算法
• 應用在探索迷宮的階段。 • 由於迷宮狀態未知,因此只能根據目前電腦鼠週遭的環境, 試著尋找到達終點的路徑。 • 演算法有左手法則、右手法則、中左法則、中右法則及向 心法則等。
全域性演算法
• 應用在已經部份或完全探索迷宮後,此時可以根據已探索 的迷宮資料找到起點至終點的最短路徑。
• 將E2設定為父節點(如圖8), 並將D2從開啟列表中刪除且 加入關閉列表中。計算E2相 鄰節點的F值。 E3 → G=54 H=4*10 F=94 F1 → G=58 H=7*10 F=128 F2 → G=54 H=6*10 F=114 F3 → G=58 H=5*10 F=108 並將其指向父節點。 選擇F值較小的E3為下一步
A*演算法(3/15)

迷宫中的老鼠(2)

迷宫中的老鼠(2)

迷宫中的老鼠(2)之前我们讨论了迷宫中的老鼠的例子。

现在我们改变老鼠走迷宫的条件,允许老鼠一次走多个格子。

我们用下面的例子来描述新的老鼠走迷宫的问题。

上图是一个N * N 二维矩阵形状的迷宫(矩阵简称为M),有一只老鼠从左上角的单元格,即M [0] [0]出发,试图走到右下角的出口,即M[N-1][N-1]。

灰色的方格表示死胡同,不允许老鼠进入。

老鼠可以向下或向右移动。

与上一题不同的是,现在允许老鼠每次移动一个或多个格子,但是允许移动的格子数是有规定的,具体规定由下面的矩阵来描述。

上面的矩阵指定了从每个方格M[i][j](0≤i≤N-1,0≤j≤N-1)中,大鼠可以向右移动多个格子(例如:到M[i][j+s]),或向下的若干格子(例如:到M [i+s][j]),其中最大步数(或s的最大值)由单元格中的值M[i][j]来限定。

如果任何方格包含0,那么这是一个死胡同。

例如:M[0][0]的值是2,表示老鼠最多一次可以跳转2步,它可以从M[0][0]跳转到以下任何一个方格:M[0][1],M[0][2],M[1][0]或M[2][0]。

但由于单元格M[1][0]的值是0,死胡同,实际上老鼠不能进入该单元格,所以老鼠实际可以从M[0][0]跳转到的有效单元方格是:M[0][1],M[0][2]或M[2][0]。

上面例子的一个可能的路径如下图所示。

如果用大小为N * N的矩阵的形式打印从老鼠M[0][0]跳跃到M[N-1][N-1]的可能路径,并且使处于路径中的所有单元格的值为1,而不在路径中的其他单元格的值为0。

那么上面例子的对应路径如下图所示。

【思考题】老鼠迷宫对应的矩阵如下,请您依照上面描述的规则找出老鼠走出迷宫的路径并以矩阵形式输出。

输入:mat[][] = {{3, 0, 0, 2, 1},{0, 0, 0, 0, 2},{0, 1, 0, 1, 0},{1, 0, 0, 1, 1},{3, 0, 0, 1, 1} }算法思路我们再定义一个矩阵CRF[N][N],记录是否可以从元素对应的位置出发到达出口。

离散数学 实验报告 迷宫最短路径问题求解

离散数学  实验报告   迷宫最短路径问题求解

离散数学迷宫问题问题描述:一只老鼠走进了一个迷宫,这个迷宫是由M行N列(如:10行8列)的方格构成的,相邻方格之间可能是相通的,也可能有墙相隔,各方格位置由其对应坐标确定,如图所示。

迷宫在(1,1)处有一个入口,在(M,N)处有一个出口,在入口和出口之间有通路相通。

问题是让你帮助老鼠找出从入口到出口的一条最短路径。

00001000110010100001000000001010101000000011101110001000基本要求:为老鼠找出一条从入口到出口的最短路径。

实现提示:1、迷宫用数组表示,1代表是墙走不通,0表示可以通行。

边界可以扩充为墙,即M×N 迷宫用(M+2)×(N+2)数组表示。

2、向4个方向前进时的位移量可以用以下数组表示,处理是方便。

int move[4][2]={ {0,1},{1,0},{0,-1},{-1,0} };3、采用图的广度优先搜索算法。

#include<stdio.h>#define m 7#define n 8void path(){int maze[m+2][n+2] ;int move[4][2]={ {0,-1},{-1,0},{0,1},{1,0} };int s[54][3];int top=0;int i,j,k,f=0;int g,h,p;for(i=0;i<m+2;++i)for(j=0;j<n+2;++j)scanf("%d",&maze[i][j]);maze[1][1]=2;s[top][0]=1;s[top][1]=1;s[top][2]=0;++top;while(top!=0&&f==0){--top;i=s[top][0];j=s[top][1];k=s[top][2];while(k<4){g=i+move[k][0];h=j+move[k][1];if(g==m&&h==n&&maze[g][h]==0) {for(p=0;p<top;++p)printf("%3d,%d\n",s[p][0],s[p][1]);printf("%3d,%d\n",i,j);printf("%3d,%d\n",m,n);f=1;}//ifif(maze[g][h]==0){maze[g][h]=2;s[top][0]=i;s[top][1]=j;s[top][2]=k;++top;i=g;j=h;k=0;}//ifk=k+1;}//while}//whileif(f==0)printf("no path\n"); }//pathvoid main(){path();}。

实验2迷宫问题

实验2迷宫问题

实验2:迷宫问题迷宫实验是取自心理学的一个古典实验。

在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。

盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。

对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。

老鼠经多次试验终于得到它学习走通迷宫的路线。

设计一个计算机程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

可以利用一个二维数组maze[i][j]表示迷宫,其中≤≤. 数组元素值为1,表示该位置是墙壁,不能通行;元素值为0,表示1i m≤≤,1j n该位置是通路。

假定从maze[1][1]出发,出口位于maze[m][n]。

移动方向可以是8个方向(东,东南,南,西南,西,西北,北和东北)。

要求程序输出:‘(1)一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。

(2)用一种标志(如数字8)在二维数组中标出该条通路,并在屏幕上输出二维数组.提示:求迷宫中一条从入口到出口的路径的算法可简单描述如下:设定当前位置的初值为入口位置do{若当前位置可通,则{将当前位置插入栈顶;//纳入路径。

若该位置是出口位置,则结束;//求得路径存放在栈中否则切换当前位置的东邻方块为新的当前位置;}否则,若栈不空且栈顶位置尚有其他方向未经探索,则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块;若栈不空但栈顶位置的四周均不可通,则{ 删去栈顶位置;//从路径中删去该通道块若栈不空,则重新测试新的栈顶位置直至找到一个可通的相邻块或出栈至栈空;}}while(栈不空);平面上点的结构:struct PosType{ int x; int y;}; //coordinates栈中元素的结构:struct SElemType{int ord; //通道块在路径上的序号struct PosType seat; //通道块在迷宫中的坐标位置int di; //从此通道块走向下一通道块的方向};迷宫(包括围墙)的对应矩阵(例):int A[14][17]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1},{1,1,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1},{1,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1},{1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1},{1,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1},{1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1},{1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1},{1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1},{1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1},{1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1},{1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1},{1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};另一文件是参考程序,去掉了几个函数体(打“?”的地方),请补上。

走迷宫电脑鼠的算法分析与研究

走迷宫电脑鼠的算法分析与研究

走迷宫电脑鼠的算法分析与研究收稿日期:2010-03-30;修订日期:2010-11-08作者简介:夏炎(1984-),男,南京人,硕士研究生,研究方向:基于ARM 的嵌入式系统的设计与开发。

夏炎(南京工业大学电子与信息工程学院,南京210013)摘要:电脑鼠的灵活性和智能程度不但取决于硬件的结构和性能,还取决于软件设计的好坏,越是智能的电脑鼠,其软件设计就越不简单。

对走迷宫电脑鼠的算法做了总结和比较,并对各算法的优缺点进行了阐述。

关键词:电脑鼠;迷宫;算法中图分类号:TP18文献标识码:A 文章编号:1008-8725(2011)01-0194-03Analyzing and Researching on Maze-runningMicromouse AlgorithmXIA Yan(School of Electronics and Information Engineering,Nanjing University of Technology,Nanjing 210013,China )Abstract:The flexibility and intelligence degree of Micromouse depended on not only structure and properties of hardware,but also whether software design was good or bad.The more intelligent the Micromouse was,the more difficult software design was.This paper concluded and compared the algorithms of maze -running micromouse,and discribed advantages and disadvantages of different algorithms.Key words:Micromouse;maze;algorithm0引言人类在科技的发展史上,一直在尝试着想要创造出一个具有肢体、感官、脑力等综合一体的智能机器人,而电脑鼠就是一个能够用来诠释肢体、感官及脑力综合工作的基本实例,这也是当初电脑鼠被发明的理由,希望能够借助电脑鼠的创作来进而研究与发明更加复杂的机械。

电子老鼠闯迷宫

电子老鼠闯迷宫

一、实习问题:电子老鼠闯迷宫二、问题描述:有一只电子老鼠被困在如下图所示的迷宫中。

这是一个7*7单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。

电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。

现给定一个起点start和一个终点finish,求出电子老鼠最少要几步从起点走到终点。

三、问题分析:该问题可用分支限界法来解决。

迷宫问题的解空间是一个图。

解此问题的队列式分支限界法从start开始将它作为第一个扩展结点。

与该扩展结点相邻并且可达的方格成为可行结点被加入到活结点队列中,并且将这些方格标记为1,即从起始方格start到这些方格的距离为1。

接着,算法从活结点队列中取出队首结点作为下一个扩展结点,并将与当前扩展结点相邻且未标记过的方格标记为2,并存入活结点队列。

这个过程一直继续到算发搜索到目标方格finish或活结点队列为空时为止。

在实现算法时,首先定义一个表示迷宫上方格位置的类Position,它的两个私用成员row 和col分别表示方格所在的行和列。

在迷宫的任何一个方格处,电子老鼠可沿右、下、左、上4个方向进行。

沿这4个方向的移动分别记为移动哦0,1,2,3。

在表中,offset[i].row和在实现上述算法时,用二维数组grid表示所给的方格阵列。

初始时,grid[i][j]=0,表示该方格允许走;而grid[i][j]=1表示该方格被封锁,不允许走。

为了便于处理方格边界的情况,算法在所给方格阵列四周设置一道“围墙”,即增设标记为“1”的附加方格。

算法开始时测试初始方格与目标方格是否相同。

如果这两个方格相同,则不必计算,直接放回起始位置标记为2。

由于数字0和1用于表示方格的开放或封锁状态,所以在表示距离时不用这两个数字,因而将距离的值都加2。

实际距离应为标记距离减2。

算法从起始位置start开始,标记所有标记距离为3的方格并存入活结点队列,然后依次标记所有标记距离为4,5…..的方格,直至到达目标方格finish或活结点队列为空时为止。

小白鼠走迷宫实验

小白鼠走迷宫实验

小白鼠走迷宫实验
在一项小白鼠走迷宫的实验中,我们目的是探究小白鼠在迷宫中寻找出口的能力。

我们选择了一个标准的迷宫,迷宫内设置了各种道路、岔路和死胡同,以模拟现实生活中的复杂环境。

实验开始时,我们将小白鼠放置在迷宫的起点,然后观察它的行为。

小白鼠会四处嗅探和探索,试图找到通往出口的道路。

我们记录并观察小白鼠的动作,如转向、停留时间和改变速度等,以评估其在迷宫中的表现。

在本次实验中,我们注意到小白鼠在最初几次尝试中可能会迷失方向,甚至走进死胡同。

然而,随着时间的推移,小白鼠逐渐学会观察周围环境并根据自身的记忆选择正确的路径。

在多次重复的实验中,小白鼠的寻路速度和准确性也显著提高。

通过这个实验,我们得出了一个结论:小白鼠具有很强的空间记忆和导航能力,在面对复杂的环境时能够逐渐适应并找到正确的道路。

这对于我们理解动物学习和导航的机制具有重要意义。

小白鼠走迷宫实验揭示了小白鼠在复杂环境中寻找出口的能力,以及它们逐渐适应并提高导航准确性的过程。

这一实验有助于我们对动物学习和空间记忆的研究。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种电脑鼠走迷宫的算法电脑鼠走迷宫的算法1探测策略电脑鼠走迷宫可以采用全迷宫探索策略,即将迷宫的所有单元均搜索一次,从中找出最佳的行走路径。

这种策略需要有足够的时间或探测次数,但在IEEE竞赛规则中每场竞赛只有15分钟的时间,因此是不可能的。

另一种方法是部分迷宫探索策略,即在有限的时间或探测次数下,只探测迷宫的一部分,从中找出次最佳的路径,显然只能采用这种策略。

电脑鼠在一巷道内行走,如果最后无路可走,则该巷为死巷。

电脑鼠在任一单元内,可能的行走方向最多只有三个(前、左、右),如果有二个或二个以上的可能行走方向,称为交叉,遇有交叉时,由于有多个可以行走的方向,在行走方向的选择上,可有下面的几种选择法则:•右手法则:遇有交叉时,以右边为优先的前进方向,然后是直线方向、左边方向。

•左手法则:遇有交叉时,以左边为优先的前进方向,然后是直线方向、右边方向。

•中左法则:遇有交叉时,以直线为优先的前进方向,然后是左边方向、右边方向。

与此类似的还有中右法则。

•乱数法则:遇有交叉时,取随机值作为前进方向。

•向心法则:由于终点在迷宫的中心,遇有交叉时,以向迷宫中心的方向为优先的前进方向。

2标记为了记忆迷宫的详细信息,需要对迷宫单元的位置进行线路标记。

全迷宫共有16×16个单元组成,可采用二维坐标方式标记,即用每个单元的XY坐标表示,如起点可标记为(0,0),终点为(7,7)。

此外,还需要对迷宫单元的可行进方向进行标记,可采用绝对方位或相对方位二种方式。

绝对方位:这是一种与电脑鼠行进方向无关的标记方式,以一个四位的二进制数,分别表示“东”﹑“西”﹑“南”和“北”四个方向。

以1表示允许行进(无墙壁),0表示不允许行进(有墙壁)。

相对方位:这是一种与电脑鼠行进方向有关的标记方式,以一个三位的二进制数即可实现标记,分别表示“前”“左”“右”,以1表示允许(无墙壁),0表示不允许(有墙壁)。

3阻断在电脑鼠试跑过程中或在最后冲刺时,需要对部分路径进行“阻断”,即在发现某条路径是死路(只有入口而无出口)时,在该路径的入口处(一般是交叉点)设置标记,即将入口的线路标记由1改为0。

4试跑试跑是获得迷宫地图(各单元路线标记)的唯一方法,因而应在规则允许的情况下,尽可能多的获得迷宫信息,为最后的冲刺准备尽可能多的信息。

在试跑过程中,要对经过的单元进行线路标记,同时还要选择一个合适的探测策略。

下面以1/4迷宫为例进行说明。

假设迷宫图布局如图三所示,共有8×8=64个单元,起点在左下角(Start),终点在右上角(End)。

选用一个8×8的矩阵map保存迷宫地图信息,矩阵的每个元素为1个字节,高4位表示探测到的可行进路径,以绝对方位标记,次序为“北”﹑“东”﹑“西”﹑“南”。

低4位记录自起点的交叉点的个数。

探测策略采用右手法则,在初始状态,矩阵map各元素的值均为FFH,00H表示死巷。

图三1/4迷宫在探测过程中,如果下一个可行进的单元已经探测过(对应的矩阵元素值非00H或非FFH),只有在发现死巷时,才对map中的数据进行修改。

对于其它情况,无论探测结果与矩阵中对应元素存储的信息是否一致,均不修改存储的信息。

对于复杂的迷宫,往往不能仅使用一种探测策略,而要综合考虑,如增加向心法则。

当发现交叉点时,应将该单元坐标和线路特征保存(如入栈),再分析可行的下一个单元是否已经探测过,如果均未探测过,则根据探测策略,选择一方向进行探测。

如果部分单元已经探测,则选择未被探测的单元进行探测。

遇有死巷,应返回最近的交叉点,同时将死巷阻断,修改入口单元的相应数值。

图四为首次探测时电脑鼠的行走路线示意,电脑鼠在探测过程中,将获得行走过的各单元的线路特征,表一为电脑鼠探测到(5,0)单元时的二维表(以十六进制表示,高4位为线路标记,低4位为交叉点数)。

图四首次探测行走路线7 FFH FFH FFH FFH FFH FFH FFH end6 FFH FFH FFH FFH FFH FFH FFH FFH5 30H 50H FFH FFH FFH FFH FFH FFH4 90H 90H FFH FFH FFH FFH FFH FFH3 90H D1H FFH FFH FFH FFH FFH FFH2 90H 90H FFH FFH FFH FFH FFH FFH1 90H B2H FFH FFH FFH FFH FFH FFH0 80H C0H 60H 60H 60H 60H FFH FFH0 1 2 3 4 5 6 7表一探测到(5,0)时的map二维表从图四可以看出,该巷为一死巷,当电脑鼠探测到(7,0)时,发现是死巷,将按原路返回到最近的交叉点(1,1),进行阻断,即将向“南”修改为不可行,并修改交叉点的数据,由原值B2H改为90H,死巷中的数据全写零,并继续完成探测,最后得表二。

7 FFH FFH FFH FFH FFH FFH FFH end6 FFH FFH FFH FFH FFH FFH FFH B0H5 30H 50H FFH FFH FFH FFH FFH B0H4 90H 90H FFH FFH FFH FFH FFH 90H3 90H D1H FFH FFH FFH FFH FFH 90H2 90H 90H FFH FFH FFH FFH FFH A2H1 90H C0H 60H 60H 60H 60H 60H 90H0 80H 00H 00H 00H 00H 00H 00H 00H0 1 2 3 4 5 6 7表二执行阻断后的二维表根据IEEE电脑鼠竞赛规定,当电脑鼠到达终点后,可进行返回探测,从而获得更多的迷宫地图信息。

图五为返回探测时的行走路径。

在返回探测中,未发现死巷,返回起点,探测后的结果如表三。

图五返回时的探测路径7 50H 60H 60H 60H 60H 60H 30H end6 C0H 60H 70H FFH FFH FFH C0H B4H5 30H 50H D2H FFH FFH FFH FFH B3H4 90H 90H C0H 60H 30H FFH FFH 90H3 90H D1H 60H 71H A0H FFH FFH 90H2 90H 90H FFH FFH FFH FFH FFH A2H1 90H C0H 60H 60H 60H 60H 60H 90H0 80H 00H 00H 00H 00H 00H 00H 00H0 1 2 3 4 5 6 7表三返回探测后的二维表图六第二次探测路径第二次探测如图六,在(3,3)和(2,5)分别执行阻断,将获得二维表四7 50H 60H 60H 60H 60H 60H 30H end6 C0H 60H 70H 72H 60H 30H C0H B4H5 30H 50H 90H 00H 00H D3H HHH B3H4 90H 90H C0H 60H 30H 90H HHH 90H3 90H D1H 60H 30H A0H 90H HHH 90H2 90H 90H HHH 00H 00H C0H 60H A2H1 90H C0H 60H 60H 60H 60H 60H 90H0 80H 00H 00H 00H 00H 00H 00H 00H0 1 2 3 4 5 6 7表四第二次探测后的二维表5数据补全由于不可能将所有的单元均探测到,在有了一定的数据基础上,就可以实现数据补全了。

数据补全,就是对未探测到的单元,通过周围已有的相数据,可进行补充的一种方法。

方法是寻找单元数据为FFH的单元,如果该单元的“东”﹑“西”﹑“南”﹑“北”四个相邻的单元均为非00H或FFH,分析“东”﹑“西”和“南”﹑“北”四个单元的二组数据,看是否有指向该单元的可行方向,如果有,在该方向是相通的,可对数据进行大胆的假设。

对照表四,(6,5)是未探测过的,其值为FFH,分析与之相邻的(5,5)(7,5)和(6,6)(6,4)二组数据,(6,4)的数据为FFH,放弃在南北方向上的补全,考虑东西方向,(5,5)向东是可行的,(7,5)向西是可行的,因而可以大胆设想,(6,5)是东西可行的,数据可设为60H,将60H填入表四,就得到补全后的表五。

7 50H 60H 60H 60H 60H 60H 30H end6 C0H 60H 70H 72H 60H 30H C0H B4H5 30H 50H 90H 00H 00H D3H 60H B3H4 90H 90H C0H 60H 30H 90H HHH 90H3 90H D1H 60H 30H A0H 90H HHH 90H2 90H 90H HHH 00H 00H C0H 60H A2H1 90H C0H 60H 60H 60H 60H 60H 90H0 80H 00H 00H 00H 00H 00H 00H 00H0 1 2 3 4 5 6 7表五补全后的二维表6等高表经过有限次的探测、阻断与补全后,已经可以得到描述迷宫图线路的二维表,虽然不是全部,但已经是部分或大部分,其中可能包含了若干条可以到达终点的路径,为了寻找到达终点的路径,需要制作等高表。

等高表是指已探测的各单元距离起点的步数(一个单元为一步),起点的步数为0,表六为通过表五所获得的等高表。

等高值以十进制数表示。

19 20 21 22 23 24 25 2818 17 16 17 18 19 26 275 6 15 20 21 224 7 14 13 12 21 193 8 9 10 11 22 182 9 23 24 171 10 11 12 13 14 15 16表六等高表7可行路径在等高表中,可行路径上任一单元到起点的步数都是已知的,按从大到小的次序,可以返回起点。

按从小到大的次序,可到达终点,这样的可行路径可能不止一个,而是多个。

可行路径的查找,从起点开始,在允许前进的方向上,按比当前等高值高1的方向前进,直到终点。

有时可能会遇到下一单元的等高值小于当前值(如(6,2)点)或比当前值高1以上的情况,如果当前单元不是交叉点,可以不予理会,进入下一个单元,按等高值增加的方向查找。

如果是交叉点,则要进行趋势分析,找出等高值就增加的方向。

舍弃等高值减少的方向。

图七是根据表六得到的所有可行路径,共有A、B、C、D四条。

图七所有的可行路径8可行路径的步数可行路径的步数,指由起点到达终点,所经过的单元数,可由等高表计算得出。

线路A:由(0,0)到(7,4),19步,(7,4)到(7,5)1步,(7,5)到(7,6)1步,(7,6)到(7,7),28-27=1步。

总计=19+1+1+1=22步。

线路B:由(0,0)到(6,2),24步,(6,2)到(7,2)1步,(7,2)到(7,4),19-17=2步,(7,4)到(7,5),1步, (7,5)到(7,6),1步。

相关文档
最新文档