看iampolaris的迷宫问题讨论--(堆栈) 在上面挂了n天了,可惜只给出了算法思想,未能找出最短的路径,也没给出源程序.于是出于兴趣,写这篇文章,与大家探讨一下最短路径的算法.这可是我的第一篇文章,肤浅的很,希望大家指正!不确定对所有的迷宫否都正确,我测试的几个还是没问题的,如果发现什么问题告诉我sduboy@163.com
其实算法思想就是一句话:“用队列实现广度优先遍历”.第一次遍历到出口时就找到了最短路径,算法停止. mazepos pre 用于保存路径,只记上一步的那一个点.最后只需从出口顺着 pre走回去即可. 【程序编程相关:开始→运行→输入的命令集锦】
【推荐阅读:在CSDN-BLOG文本编辑器中编写HT】
//开始广度优先遍历 pos=getfrontelem(q); x0=pos.x; y0=pos.y; 【扩展信息:删除Windows服务】
核心部分如下:bool travelmaze(maze maze[][10],int x0,int y0,int x1,int y1) { queue *q=initqueue(); mazepos pos; int entrancex=x0, entrancey=y0; int exitx=x1, exity=y1; if(!q) exit(1); if(maze[x0][y0].s==0)return false; pos.x=x0;pos.y=y0; maze[x0][y0].pre.x=x0;maze[x0][y0].pre.y=y0; maze[x0][y0].visited=true; enqueue(q,pos); while(!queueempty(q) &&((x0!=x1)||(y0!=y1))) {
//将与之相邻的且可以通过的所有节点入队(最多4个哦)
//可以写的更简洁一些,不过这样更好理解.... 下一页