利用广度优先算法实现路径搜索

问题描述:给定一个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值