迷宫问题 BFS回溯保存路径

本文详细介绍了一种基于广度优先搜索(BFS)的迷宫寻路算法,通过使用C++编程语言和数据结构如队列,实现了从起点到终点的路径查找,并记录了路径长度及具体路径坐标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<queue>
#include<stdlib.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
struct node
{
 int i;
 int j;
};
typedef struct node pp;
pp path[50];
struct node p1,p2;
int xx[4]={1,0,0,-1};
int yy[4]={0,1,-1,0};
int mark[10][10];
int judge(int x,int y)
{
 if(x<0||x>4||y<0||y>4)
 return 0;
 return 1;
}
int main( )
{
  int map[6][6],i,j,k,x1,y1,a,b,len=0;
  memset(mark,0,sizeof(mark));
  for(i=0;i<5;i++)
   for(j=0;j<5;j++)
     scanf("%d",&map[i][j]);
     queue<node>q;
     p1.i=0;
     p1.j=0;
     q.push(p1);
     mark[0][0]=1;
     while(!q.empty())
     {
       p1=q.front();
       q.pop();
       for(i=0;i<4;i++)
             {
              x1=p1.i+xx[i];
              y1=p1.j+yy[i];
              if(judge(x1,y1)&&map[x1][y1]!=1&&mark[x1][y1]==0)
              { 
               mark[x1][y1]=mark[p1.i][p1.j]+1;
               //printf("%d\n",len);
               if(x1==4&&y1==4)
               { 
                  len=mark[x1][y1];
                  break;
               }
                p2.i=x1;
                p2.j=y1;
                q.push(p2);
              }
            }
        }
        p1.i=4,p1.j=4;
        //printf("%d\n",len);
       for(i=len-1;i>=0;i--)
       {
        path[i].i=p1.i;
        path[i].j=p1.j;
        for(j=0;j<4;j++)
          {
            x1=p1.i+xx[j];
            y1=p1.j+yy[j];
           // printf("x1:%d\n y1:%d\n",x1,y1);
            if((mark[x1][y1]==mark[p1.i][p1.j]-1)&&judge(x1,y1))
            {
              p1.i=x1;
              p1.j=y1;
              break;
            }
          
          }
        } 
           for(i=0;i<len;i++)
       printf("(%d, %d)\n",path[i].i,path[i].j);    
        system("pause");
        return 0;
   }
        
     
  

转载于:https://www.cnblogs.com/tangcong/archive/2011/05/10/2042631.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值