POJ 3278第一道BFS,此题刚开始做是纠结了很久,毕竟是第一道要用到队列又赶紧把队列看了一遍,经过几次WA后左后总算AC了...

本文介绍了一种使用广度优先搜索(BFS)算法解决步进问题的方法,通过构建队列和标记已访问节点,实现从起点到终点的最短路径计算。

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

 1 #include<iostream>
2 #include<queue>
3 #define MAXV 100000
4 using namespace std;
5 int sign[100001],len[100001]; //sign是用来做标记的,len用来走到重点需步长
6 int main()
7 {
8 int N, K, y;
9 cin >> N >> K;
10 queue<int>Q;
11 Q.push(N);
12 len[N] = 0;
13 while(!Q.empty())
14 {
15 y = Q.front();
16 Q.pop();
17 sign[y] = 1;
18 if (y == K) break;
19 else
20 {
21 if (sign[y-1]==0 && y>=1)
22 {
23 Q.push(y-1);
24 len[y-1] = len[y] + 1;
25 sign[y-1] = 1;
26 }
27 if (y+1<=MAXV && sign[y+1]==0)
28 {
29 Q.push(y+1);
30 len[y+1] = len[y] + 1;
31 sign[y+1] = 1;
32 }
33 if (2*y<=MAXV && sign[2*y]==0)
34 {
35 Q.push(2*y);
36 len[2*y] = len[y] + 1;
37 sign[2*y] = 1;
38 }
39 }
40 }
41 cout<<len[y]<<endl;
42 return 0;
43 }
44

转载于:https://www.cnblogs.com/cn19901203/archive/2011/08/19/2146009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值