hdu 2717Catch That Cow

来源:互联网 发布:国际象棋跑分软件 编辑:程序博客网 时间:2024/05/22 01:42
/*
BFS


+1 -1 *2 三个方向搜索
*/
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;


int N,K; // 起点 终点


bool isVisited[200001]; //标记是否访问过




struct Node
{
int data; //point
int times; //找到这个点的次数
};


bool ismid(int x) //判断区间
{
if(x >= 0 && x <= 100000)
return true;
return false;
}
int BFS(int N,int K)
{
queue<Node> Q;


Node st,ed;


memset(isVisited,0,sizeof(isVisited));


st.data = N;
st.times = 0;


Q.push(st); //初始化队列第一个元素
isVisited[N] = 1;


while(!Q.empty())
{
st = Q.front();//去队列第一个元素
Q.pop(); //队列第一个元素出队
if(st.data == K)
{
return st.times;
}


if(ismid(st.data+1) && !isVisited[st.data+1])
{
ed.data = st.data+1;
ed.times = st.times + 1;
isVisited[st.data+1] = 1;//标记
Q.push(ed);
}
if(ismid(st.data-1) && !isVisited[st.data-1])
{
ed.data = st.data - 1;
ed.times = st.times + 1;
isVisited[st.data - 1] = 1;
Q.push(ed);
}
if(ismid(2*st.data) && !isVisited[2*st.data])
{
ed.data = 2*st.data;
ed.times = st.times + 1;
isVisited[2*st.data] = 1;
Q.push(ed);

}

}


}
int main()
{


while(cin>>N>>K)
{
if(N >= K)
{
cout<<N - K<<endl;
}
else
{
cout<<BFS(N,K)<<endl;
}
}
return 0;
}
原创粉丝点击