宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。
poj3278
思路:根节点n, n+1,n-1,2*n三个子节点不断地延伸,目标节点k,寻找这样一天最短的路
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
struct node
{
int x;
int ans;
}q[1000005];
int jx[]= {-1,1};
int n,k;
int map[1000005],v[1000005];
void bfs()
{
struct node t,f;
int e=0,s=0;
t.x=n;
v[t.x]=1;
t.ans=0;
q[e++]=t;
while(s<e)
{
t=q[s++];
if(t.x==k)
{
printf("%d\n",t.ans);
break;
}
for(int i=0; i<3; i++)
{
if(i==2)
f.x=t.x*2;
else f.x=t.x+jx[i];
if(!v[f.x]&&f.x>=0&&f.x<=100000)
{
f.ans=t.ans+1;
q[e++]=f;
v[f.x]=1;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(map,0,sizeof(map));
memset(v,0,sizeof(v));
bfs();
}
return 0;
}