迷宫之BFS(广度优先搜索)c++

目录

算法核心:

代码:


算法核心:

1.先将起始位置的坐标入队,并标记已经访问。

2.当队列不空情况下进行以下操作:

得到队首元素的坐标。

判断得到的坐标是否是出口坐标,如果是就跳出循环。

判断它的周围四个方向是否可以进行访问,(已经访问过的,就不能在进行访问),将能访问的坐标依次进行入队,并标记已近访问过。

3.

代码:

#include<iostream>
#include<queue>
using namespace std;
typedef pair <int ,int>p;//定义一个数对 
int main(){
 int a[4][6]={{0,1,0,0,0,0},{0,0,0,1,0,0},{0,0,1,0,0,1},{1,1,0,0,0,0}};//构造迷宫图 
 queue<p>Q;//定义一个队列 
 int sum[4][6];//用它来表示走到该坐标需要几步 
 int i,j,c,d;//起始位置坐标和出口位置位置坐标
 cin>>i>>j>>c>>d;//输入起点坐标和出口坐标 
 sum[i][j]=0; //到起点需要的步数为零 
 Q.push(p(i,j));//让起点坐标入队 
 a[i][j]=2;//标记已经访问 
 int dx[4]={1,-1,0,0};//表示四个方向 
 int dy[4]={0,0,1,-1};
 while(!Q.empty()){
 	 i=Q.front().first;//得到队首坐标 
 	 j=Q.front().second; 
 	 Q.pop();//删除队首坐标 
 	 if(i==c && j==d)
	   break;
 	 for(int k=0;k<4;k++){//判断四个方向的能否访问或则是否被访问过,能访问将坐标入队 
 	 	if(i+dx[k]>=0 && i+dx[k]<=5 && j+dy[k]>=0 &&j+dy[k]<=5 && a[i+dx[k]][j+dy[k]]==0){
 	 		Q.push(p(i+dx[k],j+dy[k]));//将坐标入队 
 	 		a[i+dx[k]][j+dy[k]]=2;//标记已经访问 
 	 		sum[i+dx[k]][j+dy[k]]=sum[i][j]+1;//记录次数 
		  } 
	  }
 }
 for(int o=0;o<4;o++){//打印迷宫 
 	for(int p=0;p<6;p++){
 		cout<<a[o][p]<<" ";//此算法是广度优先搜索,它实际是走过了所有能走的路。 
	 }
	 cout<<endl;
 }
  cout<<sum[c][d]<<endl;//输出到出口需要走的步数 
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值