《应用背景最短运输问题校园导游问题对于一个陌生环境进.ppt》由会员分享,可在线阅读,更多相关《应用背景最短运输问题校园导游问题对于一个陌生环境进.ppt(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、应用背景最短运输问题校园导游问题对于一个陌生环境进 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望应用背景:最短运输问题、校园导游问题对于一个陌生环境进行摸索而得到众多路径中的最短路径迷宫的最短路径问题二维数组mazeij有向图广度优先搜索队列(链队列)列列 012345行行00266112522343345二维数组mazeij表示迷宫,可取0或1,0表示走通,1表示受阻迷宫入口坐标为00,出口坐标为 m-1n-1,而且maze00=0,mazem-1n-1=0
2、列列 012345行行0010100 1100110 2011001 3100110表1 迷宫及其最短路径弧图1 表示迷宫的有向图表2从入口到当前方位所走步数广度优先搜索那么我们需要解决两个问题(1)如何用数据结构实现和迷宫相应的有向图(2)如何用数据结构得到路径通过上面的假设,我们自然用二维数组maze表示迷宫,从迷宫的任意一个方位(i,j)出发,一般情况下可能有8个方向可走,如图2所示。假设可以到达下 一方位的坐标为(g,h),则g=i+divh=j+djvv=0,1.7i-1,j+1i+1,j+1i,j+1i,ji-1,ji+1,ji,j-1i-1,j-1i+1,j-1图2.8个相邻位置
3、的坐标其中下标增量数组是di和dj(v的值=0为向东方向,之后顺时针旋转增加)。如果当前方位(i,j)是有向图中的一个“顶点”(即相应坐标元素为0),则其“邻接点”由计算所得元素值为0的方位(g,h)而得。di01110-1-1-1dj110-1-1-101表3 下标增量数组(i,j+1)(i+1,j+1)(i+1,j)(i+1,j-1)(i,j-1)(i-1,j-1)(i-1,j)(i-1,j+1)保存搜索路径顶点记录是从哪一个顶点搜索到该顶点的在到达出口方位时逆搜索方向“倒退”回到入口,以确定从入口到出口的最短路径。怎样实现?那我们可以运用链队列的知识,下面先进行补充。队列(queue)是
4、限定只能在表的一端进行插入,在表的另一端进行删除的线性表。允许插入一端为队尾(rear),允许删除的一端为队头(front),并且遵从先进先出(FIFO,即First In First Out)的原则。用链表表示的队列链队列一个链队列需要两个分别指向队头和队尾的指针(分别称为头指针和尾指针)。出队列(队头元素)a1a2-an(队尾元素)入队列图3 队列结构示意图我们用链队列结构和它们的操作来改变广度优先遍历:一是在出队列时“只修改队头指针而不删除队头结点”;二是入队列时,在你新插入的队尾结点中“加入弧尾顶点(方位)的信息”。为此,在链队列的结点中增加一个指针域,它的值指向当前出队列的的顶点(即
5、从“队头”到“队尾”之间存在一条弧)。图4 最短路径搜索过程中的队列 列列 012345行行00266112522343345表2 从入口到当前方位所走步数1,20,01,12,02,33,10,2QfrontQrear(1)产生迷宫矩阵mazeij和下标增量数组;(2)建立链队列的头指针、尾指针和指向弧尾位置的指针;(3)用matlab的动态数组实现队列,进行广度优先搜索;(4)找到路径后,逆搜索方向“倒退”回到入口,以确定从入口到出口的最短路径。下面是运行matlab程序后,根据所得的不同类型的maze矩阵(随机而得)的三种不同的情况。图中,绿色点为入口,红色点为出口,黑色点为所的路径。图5.1有最短路径图5.2 没有最短路径,只进行了一些搜索图5.3开始便搜索受阻这样的问题还可以推广为骑士巡游问题,也就是:设有一个mn的棋盘(2m50,2n50),在棋盘上任一点有一个中国象棋“马”,马走的规则为:马走日字;马只能向右走。当m,n给出后,同时给出马起始的位置和终点的位置,试找出从起点到终点所有路径的数目,并求最短路径。这样的问题思路都是有相通之处的:首先表示出用二维数组表示出棋盘,然后将其生成有向图,并用链队列进行广度优先搜索或深度优先搜索,最后逆路径而得最短路径。
限制150内