Catch That Cow-BFS

本文介绍了一种使用广度优先搜索(BFS)算法解决迷宫寻路问题的方法,通过三种移动方式(前进、后退、跳跃)寻找从起点到终点的最短路径。特别关注了边界条件的设定,避免无效搜索,提高算法效率。

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

在这里插入图片描述
ThaT
3种移动方式,+1,-1,*2,在入队前需要剪枝,即限制条件,我在这个边界条件卡了两个小时,一直WA和RE,真是代码5分钟,调试2小时啊。。。我把边界上限设置为目标地点,但这样完全是错的。。。
例如 输入6 10,很明显,最短的时间是6->12->11->10,如果超过就剪掉那么结果就。。。唉我这猪脑子

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
int n,m;
int vis[100005];
struct node{
	int step;
	int dir;//当前位置 
};
int ans;
node Now,Next;
queue<node>q;
void bfs(int x){
	Now.dir=x;Now.step=0;
	q.push(Now);
	while(!q.empty()){
		Now=q.front();q.pop();
		if(Now.dir==m){
			ans=Now.step;
			return;
		}
		
	//	int pos=0;
		for(int i=0;i<3;i++){
			if(i==0)Next.dir=Now.dir-1;
			else if(i==1)Next.dir=Now.dir+1;
			else Next.dir=Now.dir*2;
			if(Next.dir<0||Next.dir>100005)continue;//我在这里被卡了两个小时,我判断边界上限设置为目标地点。。。
			if(!vis[Next.dir]){
				vis[Next.dir]=1;
				Next.step=Now.step+1;
				//Next.dir=pos;
				q.push(Next);
				
			}
		}
	}
	
}
int main()
{
	//while(cin>>n>>m){
		cin>>n>>m;
		//memset(vis,0,sizeof(vis));
		while(!q.empty())q.pop();
		if(n>=m){
			cout<<n-m<<endl;
		}
		else{
			bfs(n);
			cout<<ans<<endl;
		}
	//}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值