您好,欢迎来到微智科技网。
搜索
您的当前位置:首页走迷宫-蓝桥杯

走迷宫-蓝桥杯

来源:微智科技网

#include<iostream>
#include<queue>
using namespace std;
const int N=110;
int a[N][N];
int vis[N][N];      //标记数组,是否路径已经被范围过 
int n,m;
int x1,y1,x2,y2;    //定义入口和出口的位置

int p[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; //定义可能的移向位置 

struct node      //定义结构体 ,定义位置坐标和步长 
{
	int x,y,step;    
}; 
bool check(int x,int y)
{
	if(x<1||x>n||y<1||y>m || vis[x][y] || !a[x][y])
	   return false;
	else
	   return true;
}
int bfs(int x,int y)
{
	queue<node> que;
	que.push(node{x,y,0});    //队列入队迷宫的起点
	vis[x][y]=1;          //标记这条路已经走过
	while(!que.empty())
	{
		node u=que.front();    //取出队列的队首元素 
		que.pop();    //出队 
		if(u.x==x2&&u.y==y2)   //已经走完了迷宫 
		{
			return u.step;  
		} 
		for(int i=0;i<=3;i++)    //可以走四个方向 
		{
			int move1=u.x+p[i][0];
			int move2=u.y+p[i][1];
			if(!check(move1,move2))
			{
			   continue;
			}   
			vis[move1][move2]=true;
			que.push( node{move1,move2,u.step+1} ); 
		} 
	}
	return -1;
}
int main()
{
     cin>>n>>m;
     for(int i=1;i<=n;i++)
       for(int j=1;j<=m;j++)
      	cin>>a[i][j];
     	  
	 cin>>x1>>y1>>x2>>y2;
	 cout<<bfs(x1,y1)<<endl;
	return 0;
} 

问题得到结局。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务