文章

20

粉丝

146

获赞

10

访问

41.3k

头像
奇怪的电梯 - bfs求解
P1072
发布于2022年6月18日 22:34
阅读数 4.4k

思路

这显然是一道 bfs 的题了,需要注意的就是是否加入队列的判断条件,需要加一个数组,来判断这一楼层是否到过,因为要找最短路径嘛,肯定是在不同的楼层了,这样也避免了这一楼层数字为0,一直在这一个楼层和几个楼层来回去,不断循环的情况。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 205;
int n, a, b, flag, sum;
//arr数组用来存不同楼层的数字,pre数组用来存这一楼层的上一楼层
//例如pre[x] = y就是x的上一楼层是y,类似并查集中的,哈哈哈
int arr[N], pre[N];
int book[N];
queue<int> q;
//递归
void sumj(int x)
{
    if(x == a){//终止条件
        sum ++;
        return;
    }
    x = pre[x];
    sum ++;
    sumj(x);
}
//bfs模板
void bfs()
{
    q.push(a);
    while(!q.empty()){
        int t = q.front();
        q.pop();
        int x = t + arr[t];
        int y = t - arr[t];
        //大于0且小于n且这一楼层未访问过
        if(x > 0 && x <= n && book[x] != 1){
            //标记已经访问过
            book[x] = 1;
            q.push(x);
            pre[x] = t;
            if(x == b){
                /...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发