解题思路:简单BFS,队列记录当前状态(位置),再开个dis数组记录起点到当前点的距离(步数)即可。示例程序:#include <bits/stdc++.h> using namespace std; int dis[220], n, a, b, k[220]; queue<int> que; int main() { cin >> n >> a >> b; for (int i = 1; i <= n; i ++) cin ...
1、对于初始状态入队,设置初始状态为已访问。 2、如果队列不为空时,出队队头元素,否则跳到第五步。 3、检查出队的元素,检查所有相邻状态,如果有效且未访问,则将所有有效的相邻状态进行入队,并且设置这些状态为已访问,然后跳到第二部重复执行。 4、对于所有出队的元素,检查所有相邻状态,如果有效且未访问,则所有...
P1135 奇怪的电梯【BFS】 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第ii层楼(1 \le i \le N)(1≤i≤N)上有一个数字K_i(0 \le K_i \le N)Ki(0≤Ki≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果...
简介:这是一个关于奇怪电梯的编程问题摘要:- 电梯在每层停,且每层有特定数字Ki决定上/下按钮的功能。- 目标是从A楼到B楼,求最少按键次数,若无法到达则输出 `-1`。- 输入包括N(楼层数)、A(起点)和B(终点),以及每层的Ki数字。- 使用广度优先搜索(BFS)解决,通过队列存储访问过的楼层,避免重复并计算步数。
洛谷P1135 奇怪的电梯 题解 BFS https://www.luogu.com.cn/problem/P1135 题目大意: 给你\(k_i(1 \le i \le n)\),从 \(i\) 能到达 \(i - k_i\) 和 \(i + k_i\),前提是目标数值在 \(1 \sim n\) 范围内,求从 \(a\) 到 \(b\) 至少要几步。
BFS 开个标记数组,用队列,然后就判断找下去,找到就跳出,就能保证用的次数最少,没找到则是-1。 #include<bits/stdc++.h>using namespace std;queue<pair<int ,int >>mo;const int maxn=20005;int a[maxn];int ans[maxn];int sf[maxn];int n;bool jg(int d){if(d>=1&&d<=n){return true;}...
思路:核心思想BFS+剪枝,本题我一看到求至少,就想到BFS(因为BFS就是用来求最优解的),想到BFS后,就想到了剪枝,因为一般这种题不剪枝都要超时,思路就是这样,只是有几...
能用DFS或BFS做的题,本题解使用BFS。 题面 时间空间限制:1.0s 125.0MB silu 思路 因为要求的是按按钮的最少次数,所以可以使用优先队列。定义结构体opt(operation的简写),里面放有两个int,一个表示楼层,一个表示总按键次数,重载大于号小于号,只以总按键次数为关键字排序。在优先队列中,将按按钮次数最少的放在...
P1135 奇怪的电梯 吐槽 第一道同时用BFS和DFS两种方法做出来的题目 题目 BFS 最大的注意点就是判断是否经历过该楼层 #include<bits/stdc++.h>usingnamespacestd;intn,a,b;intdis[201],f[201]; queue<int>q;boolcheck(intx){returnx>=1&&x<=n;...
} bfs版本 #include<bits/stdc++.h>usingnamespacestd;intn,m,A,B;intflag=0,ans=0x3f3f3f,vis[205];inta[205]; queue<pair<int,int> >q;intbfs(){while(!q.empty()){ pair<int,int> k=q.front(); vis[k.first]=1; q.pop();if(k.first==B){ ...