博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用广度优先算法实现路径搜索
阅读量:5297 次
发布时间:2019-06-14

本文共 1619 字,大约阅读时间需要 5 分钟。

问题描述:给定一个32*32的地图,地图中有若干障碍,使用蓝色方块画出,设计算法找到一条路径能够不碰障碍的从图的左上角转移到右下角,并用绿色线画出。
思路:首先使用BFS对全地图进行搜索,找出除去障碍的点之外的到达每一个点的最短步数。然后再依次的绘出当前点和其周围最小步数点的路径。
不用多说你也能看出来这是作业。。。代码很粗糙,很多该用变量表示的地方用了特定值,仅仅为了展示效果而实现。
 
  1. %BFS路径搜索
  2. %Date-2015-12-29
  3. %-----初始化-----
  4. clear all;
  5. clc
  6. z=zeros(32,32);
  7. grd=zeros(32,32);
  8. grd(1,:)=1;
  9. grd(32,:)=1;
  10. grd(:,1)=1;
  11. grd(:,32)=1;
  12. grd(6:12,7:12)=1;
  13. grd(20:27,4:8)=1;
  14. grd(16,22:27)=1;
  15. grd(10:27,18)=1;
  16. grd(7:16,27)=1;
  17. grd(24,12:19)=1;
  18. gimag=grd;
  19. grd1=grd;
  20. Tempx=2;
  21. Tempy=2;
  22. grd(Tempx,Tempy)=2;
  23. grd(31,31)=3131;
  24. distancemin=64;
  25. route=zeros(32,32);%32,32
  26. route(2,2)=1;
  27. length=5;
  28. flag=0;
  29. dirc=0;
  30. xqueue = zeros(3131);
  31. yqueue = zeros(3131);
  32. xqueue(1) = 2;
  33. yqueue(1) = 2;
  34. startflag = 1;
  35. endflag = 1;
  36. while 1
  37. for i=-1:1
  38. for j= -1:1;
  39. if grd(xqueue(startflag)+i,yqueue(startflag)+j)==0||grd(xqueue(startflag)+i,yqueue(startflag)+j)>grd(xqueue(startflag),yqueue(startflag))+1
  40. grd(xqueue(startflag)+i,yqueue(startflag)+j)=grd(xqueue(startflag),yqueue(startflag))+1;
  41. xqueue(endflag+1) = xqueue(startflag)+i;
  42. yqueue(endflag+1) = yqueue(startflag)+j;
  43. endflag = endflag+1;
  44. end
  45. end
  46. end
  47. if grd(31,31) ~= 3131
  48. break;
  49. end
  50. startflag = startflag + 1;
  51. end
  52. xnow = 2;
  53. ynow = 2;
  54. z(2,2) = 1;
  55. for i = 1:100
  56. max = 0;
  57. for p = 1:-1:-1
  58. for q = 1:-1:-1
  59. if grd(xnow+p,ynow+q)>max&&z(xnow+p,ynow+q)==0
  60. max = grd(xnow+p,ynow+q);
  61. xnowmax = xnow+p;
  62. ynowmax = ynow+q;
  63. end
  64. end
  65. end
  66. xnow = xnowmax;
  67. ynow = ynowmax;
  68. route(xnowmax,ynowmax) = 1;
  69. z(xnowmax,ynowmax)=1;
  70. imh = image(cat(3,z,route,gimag));
  71. set(imh, 'cdata', cat(3,z,route,gimag));
  72. drawnow;
  73. pause(0.1);
  74. if xnow==31&&ynow==31
  75. break;
  76. end
  77. end
  78. %
效果:

转载于:https://www.cnblogs.com/zzandliz/p/5143519.html

你可能感兴趣的文章
js 数组,字符串,json互相转换(在select实现多个输入的时候与后台交互常使用)...
查看>>
js index of()用法
查看>>
XSS原理及防范
查看>>
WPF中Image显示本地图片
查看>>
SVN版本管理
查看>>
匿名函数
查看>>
mongodb安全
查看>>
IntelliJ的.iml文件及相关的Class Not Found 问题
查看>>
nginx指定文件路径有两种方式root和alias
查看>>
随机排序整个数组
查看>>
哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
查看>>
Kubernetes源码阅读笔记——Scheduler(之一)
查看>>
js学习总结----多级菜单jquery版本
查看>>
外行人都能看得懂的机器学习,错过了血亏!
查看>>
Java - 单例模式
查看>>
Shell基础学习小结
查看>>
SATA主机协议的FPGA实现之准备工作
查看>>
java 操作 Excel,java导出excel
查看>>
ios 字典转模型
查看>>
[Cocos2d-x开发问题-3] cocos2dx动画Animation介绍
查看>>