poj 3278
Posted 钟钟终
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 3278相关的知识,希望对你有一定的参考价值。
poj 3278 catch that cow
思路:维护一个队列,每个位置都有三种走法,然后将这三个状态放入队列中,再pop掉上一个位置。
不知道为啥,代码poj上过不了,感觉没什么问题,思路也很清晰
#include <iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,k;
bool vis[10005];
struct node
{
int x;
int step;
};
bool check(int x)
{
if(x<0||x>10000||vis[x])
return false;
else
return true;
}
int bfs(int n,int k)
{
node now,nt;
vis[n]=1;
now.x=n;
now.step=0;
queue<node>q;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(now.x==k)
return now.step;
nt.x=now.x+1;
if(check(nt.x))
{
nt.step=now.step+1;
vis[nt.x]=1;
q.push(nt);
}
nt.x=now.x-1;
if(check(nt.x))
{
nt.step=now.step+1;
vis[nt.x]=1;
q.push(nt);
}
nt.x=now.x*2;
if(check(nt.x))
{
nt.step=now.step+1;
vis[nt.x]=1;
q.push(nt);
}
}
}
int main()
{
cin>>n>>k;
memset(vis,0,sizeof(vis));
int tmp=bfs(n,k);
cout<<tmp<<endl;
return 0;
}
poj 1426 Find the Multiple
pop掉一个数,塞进去两个衍生的数。
tips:
1.m的十进制表示不能超过100位。longlong的范围是肯定能找到一个符合条件的数,所以不要用字符串类型去表示100位。
#include <iostream>
#include<queue>
using namespace std;
int n;
void bfs(long long tmp)
{
queue<long long>q;
q.push(tmp);
while(!q.empty())
{
long long now=q.front();
q.pop();
if(now%n==0)
{
cout<<now<<endl;
return;
}
q.push(now*10);
q.push(now*10+1);
}
}
int main()
{
while(cin>>n&&n)
{
bfs(1);
}
return 0;
}
以上是关于poj 3278的主要内容,如果未能解决你的问题,请参考以下文章