信息奥赛一本通 - 1253:抓住那头牛

这篇文章介绍了如何使用宽度优先搜索(BFS)算法,通过while循环和队列操作,对给定的坐标进行递增和递减操作,直到达到目标值k,并记录每个节点的访问次数。当找到目标节点时,输出路径计数。
摘要由CSDN通过智能技术生成

 思想:

bfs广搜:while循环(队列有元素){每次都对于队首的坐标尝试+1,-1,x2的操作(用for循环)。注意:如果位置已经大于目标,停止+1并x2,因为这样做已经没有用了。然后,把队首删除。把操作后得到的坐标放入队尾。if判断:如果已经到达目的地就输出并返回。} 

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,b[1000005];
bool a[1000005];
queue<int> q;
int w[3]={1,-1,2};
void bfs(int s){
	q.push(s);
	while(!q.empty()){
		int x=q.front();
//		cout<<"x:"<<x<<endl;
		q.pop();
		for(int i=0;i<3;i++){
			int n=w[i]+x;
			if(w[i]==2) n=2*x;
//			cout<<"n:"<<n<<endl;
			if(a[n]==0&&n>=0&&n<=2*k){
				q.push(n);
				a[n]=1;
				b[n]=b[x]+1;
//				cout<<"b[n]:"<<b[n]<<endl;
				if(n==k){
					cout<<b[n];
					return;
				}
			}
		}
	}
}
int main(){
	cin>>n>>k;
	bfs(n);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值