您的位置:首页 > 理论基础 > 计算机网络

POJ3278http://poj.org/problem?id=3278

2015-07-20 13:36 597 查看
http://poj.org/problem?id=3278
题目大意: m,n两个数m可+1, -1, *2变成n,需要经过几步

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<queue>
#define max(a, b)(a > b ? a : b)
#define N 100010

using namespace std;

struct node
{
int x, step;
};

int m, n;
bool vis
;

int judge(int x)
{
if(x <= 100000 && x >= 0 && !vis[x])
return 1;
return -1;
}

int BFS(int x)
{
queue<node>Q;
node now, next;
now.x = x;
now.step = 0;
vis[now.x] = true;
Q.push(now);
while(!Q.empty())
{
now = Q.front();
Q.pop();
if(now.x == n)
return now.step;
next.x = now.x + 1;
if(judge(next.x) == 1)
{
vis[next.x] = true;
next.step = now.step + 1;
Q.push(next);
}
next.x = now.x - 1;
if(judge(next.x) == 1)
{
vis[next.x] = true;
next.step = now.step + 1;
Q.push(next);
}
next.x = now.x * 2;
if(judge(next.x) == 1)
{
vis[next.x] = true;
next.step = now.step + 1;
Q.push(next);
}
}
return -1;
}
int main()
{
while(scanf("%d%d", &m, &n)!= EOF)
{
memset(vis, false, sizeof(vis));
printf("%d\n", BFS(m));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: