代码源 BFS练习1

BFS练习1

http://oj.daimayuan.top/course/11/problem/147

题目

思路

四个方向进行BFS

注意:此题读写量大,cin会被卡

代码

#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>

using namespace std;
const int N = 1e5 + 5;
int dis[N];
queue<int>q;

bool Range (int x) {
    if (x < 1 || x > (int)1e5)
        return false;
    return true;
}

void change (int v, int u) {
    if (Range(v) && dis[v] == 0x3f3f3f3f){ //代表没被更新过,所以是最短
        dis[v] = dis[u] + 1;
        q.push (v); //迭代更新
    }
}

void bfs (int x) {
    memset (dis, 0x3f, sizeof dis);
    q.push (x);
    dis[x] = 0;

    while (!q.empty()) {
        int y = q.front();
        q.pop();
        change (y + 1, y);
        change (y * 2, y);
        change (y * 3, y);
        change (y - 1, y);
    }
}

int main () {
    int a, q;
    scanf ("%d %d", &a, &q);
    bfs (a); //居然忘了调用emmm
    while (q --) {
        int x;
        scanf ("%d", &x);
        printf ("%d ", dis[x]);
    }

}

总觉得搜索是一个很抽象的东西。。。

posted @ 2022-04-02 22:09  Sakana~  阅读(63)  评论(0编辑  收藏  举报