POJ-3278 catch that cow 广度优先搜索
2017-07-31 15:20
543 查看
以牛的位置为起始点向前搜索,注意状态更新就好了
不要问我为什么是从后往前搜...我也不知道,我第一遍从前往后搜的wa了 然后换从后往前搜就AC了...
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
int dis[100005];
int bfs(int n){
for(int i=0;i<=100000;i++){
dis[i]=99999999;
}
queue<int>q;
q.push(n);
dis
=0;
while(!q.empty()){
int t=q.front();
q.pop();
if(dis[t-1]>dis[t]+1&&t>=1){
dis[t-1]=dis[t]+1;
q.push(t-1);
}
if(dis[t+1]>dis[t]+1&&t<=100000){
dis[t+1]=dis[t]+1;
q.push(t+1);
}
if(t%2==0)
if(dis[t/2]>dis[t]+1&&t>=0){
dis[t/2]=dis[t]+1;
q.push(t/2);
}
}
}
int main()
{
int N,K;
while(cin>>N>>K){
bfs(K);
cout<<dis
<<endl;
}
return 0;
}
不要问我为什么是从后往前搜...我也不知道,我第一遍从前往后搜的wa了 然后换从后往前搜就AC了...
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
int dis[100005];
int bfs(int n){
for(int i=0;i<=100000;i++){
dis[i]=99999999;
}
queue<int>q;
q.push(n);
dis
=0;
while(!q.empty()){
int t=q.front();
q.pop();
if(dis[t-1]>dis[t]+1&&t>=1){
dis[t-1]=dis[t]+1;
q.push(t-1);
}
if(dis[t+1]>dis[t]+1&&t<=100000){
dis[t+1]=dis[t]+1;
q.push(t+1);
}
if(t%2==0)
if(dis[t/2]>dis[t]+1&&t>=0){
dis[t/2]=dis[t]+1;
q.push(t/2);
}
}
}
int main()
{
int N,K;
while(cin>>N>>K){
bfs(K);
cout<<dis
<<endl;
}
return 0;
}
相关文章推荐
- POJ-3278 Catch That Cow【广度优先搜索】
- poj 3278 Catch That Cow 广度优先搜索
- POJ 3278 Catch That Cow(BFS广度优先搜索)
- poj 3278 Catch That Cow
- poj 3278 Catch That Cow bfs
- POJ 3278 Catch That Cow
- catch that cow(简单bFS)抓牛 POJ - 3278
- BFS —— POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- POJ 3278-Catch That Cow
- POJ 3278 Catch That Cow(追赶母牛)
- POJ 3278 Catch That Cow(DFS)
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- Poj 3278 Catch That Cow
- POJ 3278 Catch That Cow BFS(第一题)
- Catch That Cow POJ - 3278