您的位置:首页 > 其它

POJ 3278 Catch That Cow

2016-03-19 11:06 435 查看
给出两个数字 和三种操作分别是加一减一和乘2,问第一个数变成第二个书的最小操作数

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
int ans[120];
#define sp  system("pause")
#define mt(dp) memset(dp,0,sizeof dp)

struct Node
{
int loc;
int step;
};

int n,k;

queue<Node> q;
bool vis[202000];

void bfs()
{
Node node;
node.loc = n;
node.step = 0;
vis
= 1;
q.push(node);
while(!q.empty())
{
Node temp;
node = q.front();
q.pop();
if(node.loc == k)
{
cout<<node.step<<endl;
return ;
}
if(node.loc - 1 >= 0 && vis[node.loc - 1] == false)
{
vis[node.loc - 1] = true;
temp.loc = node.loc - 1;
temp.step = node.step + 1;
q.push(temp);
}
if(node.loc + 1 <= k && vis[node.loc + 1] == false)
{
vis[node.loc + 1] = true;
temp.loc = node.loc + 1;
temp.step = node.step + 1;
q.push(temp);
}
if(node.loc * 2 <=200000 && vis[node.loc * 2] == false)
{
vis[node.loc * 2] = true;
temp.loc = node.loc * 2;
temp.step = node.step + 1;
q.push(temp);
}
}
}

int main()
{
while(cin>>n>>k)
{
memset(vis,0,sizeof(vis));
while(!q.empty())
q.pop();
bfs();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: