bfs专练1

本文介绍了多个与迷宫问题相关的编程挑战,包括牛客网上的题目,如寻找迷宫中丢失的孩子、青蛙妈妈找蝌蚪的路径优化问题以及双向 BFS 相遇问题。这些题目旨在锻炼和提升使用 BFS(宽度优先搜索)算法解决实际问题的能力。
摘要由CSDN通过智能技术生成

1.迷宫问题
题目链接:https://ac.nowcoder.com/acm/problem/14572 来源:牛客网

#include<bits/stdc++.h>
using namespace std;
char mp[1005][1005];
int n,m,ax,ay,bx,by,vis[1005][1005];
struct su{
   
 int x,y;
};
int dx[4]={
   -1,0,1,0};//上,右,下,左
int dy[4]={
   0,1,0,-1};
int main()
{
   
    while(cin>>n>>m){
   
        memset(vis,0,sizeof(vis));
        memset(mp,0,sizeof(mp));
	    for(int i=1;i<=n;i++){
   
	    for(int j=1;j<=m;j++){
   
	     cin>>mp[i][j];
	     if(mp[i][j]=='S'){
   ax=i;ay=j;}
	     }
	    }
    queue<su> q;
   su s1;
   s1.x=ax;s1.y=ay;
   q.push(s1);
   vis[ax][ay]=1;
   int ans=-1;
	   while(!q.empty()){
   
			  su p=q.front();q.pop();
			    int x=p.x,y=p.y;
			    if(mp[x][y]=='E'){
    ans=1;break;} 
			    for(int i=0;i<4;i++){
   
			       int tx=x+dx[i],ty=y+dy[i];
			       if(tx < 1 || tx > n || ty < 1 || ty > m || mp[tx][ty] == '#') continue;
				   if(vis[tx][ty]==0){
   
				   	    su s2;
			            vis[tx][ty]=1;
						s2.x=tx;s2.y=ty; 
			            q.push(s2);
			        }
			    }		    
	   }
	   if(ans==-1) cout<<"No\n";
	   else cout<<"Yes\n";
	}
   return 0;
}

2.小妈妈找蝌蚪

题目链接:https://ac.nowcoder.com/acm/problem/14663
题目大意:青蛙妈妈回到家时,发现孩子走丢了。池塘里有很多石头,青蛙家在其中标号为s的石头上。小蝌蚪会移动k分钟,每分钟会出现在任意石头边,甚至多次出现在一块石头边。但k分钟之后,蝌蚪就游不动了。青蛙妈妈第0秒从家所在的石头出发,每分钟移动一次,可以留在原地,也可以跳跃到一块当前可跳跃到的石头上(只能在特定的石头间双向跳跃)。
问:青蛙妈妈最少几分钟发现蝌蚪宝宝
分析:即求出青蛙起点到任一点的最短时间

#include<bits/stdc++.h>
using namespace std;
int n,m,k,s;
const int N=100005;
int a[N],vis[N],x,y;
vector<int> v[N];//用于储存联通表信息 
queue<pair<int,int> > q;
void bfs(){
   
	memset(vis,0,sizeof(vis));//同v[]
	while(q.size()) q.pop();// 同v[]
	vis[s]=1;//标记家的位置
	q.push(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值