刚看了挑战程序设计竞赛上的搜索入门专题,做完书上走迷宫的问题正好来做这个不是很难(可能对大佬来说这都不叫题)的题,算是正式做的第二道广搜题吧,对搜索已经有了一定的理解,简单来说就是在现在这个位置,下一步应该往哪边走,把所有的方向都要列举出来。
下面是这个题的代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 100010;
int n,k,ans,step[maxn],vis[maxn];
int bfs()
{
int que[maxn],frt = 0,til = 0;
memset(que,0,sizeof(que));
que[til++] = n;
vis[n] = 1;
while(frt != til)
{
int q = que[frt++];
int next;
for(int i = 0;i < 3; i++)
{
if(i == 0)
next = q + 1;
if(i == 1)
next = q - 1;
if(i == 2)
next = 2 * q;
if(next >= 0 && next < maxn && !vis[next])
{
que[til++] = next;
vis[next] = 1;
step[next] = step[q] + 1;
}
if(next == k)
return step[next];
}
}
}
int main()
{
scanf("%d %d",&n,&k);
if(k <= n)
printf("%d",n - k);
else
printf("%d",bfs());
return 0;
}
PS:BFS入门题目,不过做出来也是很开心的,终于会用BFS了。