代码源 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]);
}
}
总觉得搜索是一个很抽象的东西。。。