您的位置:首页 > 其它

POJ 3278 Catch That Cow

2011-08-06 16:32 260 查看
Problem: 3278User: nasta
Memory: 1276KTime: 32MS
Language: G++Result: Accepted

题意:

题目给出两个数a b,求由a经过加一,减一或乘二经过最小的步数n到b,输出n,例如:对于a=5,b=17 有:5-10-9-18-17, n=4

思路:

简单BFS

居然因为时间是用char开的WA了N次、、、够水的

#include <iostream>
#include <queue>
#define N   100001

using namespace std;

int t
;
bool s
;

int bfs(int n, int k)
{
queue<int> q;
for(int i=0; i < N; ++i)
{
t[i] = -1;
s[i] = 0;
}
s
= 1;
t
= 0;

q.push(n);
while(!q.empty())
{
int u = q.front();q.pop();
//cout << "c: " << u << "\tt: " << (int)t[u] <<  endl;
if(u == k)
return t[u];
int m[3] = {u*2, u-1, u+1};
for(int i=0; i < 3; ++i)
{
const int &next = m[i];
if(next>=0 && next <= N+1 && !s[next])
{
q.push(next);
s[next] = true;
t[next] = t[u] + 1;
}
}
}
return -1;
}

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