题意:给出n,k,其中n可以加1,可以减1,可以乘以2,问至少通过多少次变化使其变成k

可以先画出样例的部分状态空间树

可以知道搜索到的深度即为所需要的最小的变化次数

下面是学习的代码----@_@

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 100005
using namespace std;
queue<int> q;
int visit[maxn],step[maxn],n,k; int bfs(int n,int k)
{
int head,next,i;
q.push(n);
visit[n]=1;
step[n]=0;
while(!q.empty())
{
head=q.front();
q.pop();
for(i=1;i<=3;i++)
{
if(i==1) next=head-1;
else if(i==2) next=head+1;
else next=2*head;
if(next<=100005&&next>0)
{
if(!visit[next])//判重
{
q.push(next);
visit[next]=1;
step[next]=step[head]+1;
}
}
if(next==k) return step[next];
}
}
}
int main()
{
scanf("%d %d",&n,&k);
if(n>=k) printf("%d\n",n-k);
else
printf("%d\n",bfs(n,k));
}

  学习BFS的第一题————go---go--

补写一个模拟队列写的,还是学习的代码,参看的这一篇http://blog.csdn.net/freezhanacmore/article/details/8168265

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100005
using namespace std;
int vis[maxn],n,k;
struct node
{
int x,step;
} q[maxn];
int bfs(int n,int k)
{
node now,next;
int head=0,tail=0;
q[tail].x=n;//将当前这一节点入队
q[tail].step=0;tail++;
vis[n]=1;
while(head<tail)
{
now=q[head];//取出队头
head++;//弹出队头
for(int i=0;i<3;i++)
{
if(i==0) next.x=now.x+1;
else if(i==1) next.x=now.x-1;
else next.x=now.x*2;
if(next.x<0||next.x>=maxn) continue;//越界了的话就剪枝
if(!vis[next.x])
{
vis[next.x]=1;
next.step=now.step+1;
q[tail]=next;
tail++;
if(next.x==k) return next.step;
}
}
}
}
int main()
{
while(scanf("%d %d",&n,&k)!=EOF)
{
memset(vis,0,sizeof(vis));
if(n>=k) printf("%d\n",n-k);
else printf("%d\n",bfs(n,k));
}
}

  

POJ 3278 Catch That Cow【BFS】的更多相关文章

  1. POJ - 3278 Catch That Cow 【BFS】

    题目链接 http://poj.org/problem?id=3278 题意 给出两个数字 N K 每次 都可以用三个操作 + 1 - 1 * 2 求 最少的操作次数 使得 N 变成 K 思路 BFS ...

  2. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  3. hdoj 2717 Catch That Cow【bfs】

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. poj 3278 Catch That Cow (bfs)

    题目:http://poj.org/problem?id=3278 题意: 给定两个整数n和k 通过 n+1或n-1 或n*2 这3种操作,使得n==k 输出最少的操作次数 #include<s ...

  5. POJ 3278 Catch That Cow(简单BFS)

    题目链接:http://poj.org/problem?id=3278 题目大意:给你两个数字n,k.可以对n执行操作(n+1,n-1,n*2),问最少需要几次操作使n变成k. 解题思路:bfs,每次 ...

  6. POJ 3278 Catch That Cow(BFS 剪枝)

    题目链接:http://poj.org/problem?id=3278 这几次都是每天的第一道题都挺顺利,然后第二道题一卡一天. = =,今天的这道题7点40就出来了,不知道第二道题在下午7点能不能出 ...

  7. POJ——3278 Catch That Cow(BFS队列)

    相比于POJ2251的三维BFS,这道题做法思路完全相同且过程更加简单,也不需要用结构体,check只要判断vis和左右边界的越界情况就OK. 记得清空队列,其他没什么好说的. #include< ...

  8. BFS POJ 3278 Catch That Cow

    题目传送门 /* BFS简单题:考虑x-1,x+1,x*2三种情况,bfs队列练练手 */ #include <cstdio> #include <iostream> #inc ...

  9. POJ 3278 Catch That Cow(赶牛行动)

    POJ 3278 Catch That Cow(赶牛行动) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 Farmer J ...

随机推荐

  1. 【译文】采用chrome的DevTool中TimeLine和profile工具提升Web app性能

    ->译文,原文在这里<- 本文地址: http://www.cnblogs.com/blackmanba/p/web-perfomance-with-Chrome-DevTools.htm ...

  2. T7316 yyy的最大公约数(者)

    题目背景 全场基本暴力 题目描述 输入输出格式 输入格式: 如图 输出格式: 如图 输入输出样例 输入样例#1: 如图 输出样例#1: 如图 说明 如图 这题用到了容斥原理和线性筛的一些东西, 表示没 ...

  3. 初学C#,总结一下.sln和.csproj的区别

    1.sln:solusion 解决方案 csproj:c sharp project C#项目 csproj文件大家应该不会陌生,那就是C#项目文件的扩展名,它是“C Sharp Project”的缩 ...

  4. OpenGL编程(八)3D数学与坐标变换

    笛卡尔坐标 一维坐标系 以一个点为原点,选定一个方向为正方向(相反的方向为反方向),以一定的距离为标尺建立一维坐标系.一维坐标系一般应用于描述在一维空间中的距离. 举个例子:一维坐标系好比一条拉直的电 ...

  5. intell-

    intellect: n.[U, C] the ability to think in a logical way and understand things, especially at an ad ...

  6. 01《UML大战需求分析》阅读笔记之一

    在大二的时候就已经在课堂上对UML也就是统一建模语言有了初步的了解,但是却不怎么明白,虽然可以画图可以完成任务,但是有些糊里糊涂.所以特地把这门书作为精读书籍,想要更加深度地学习UML.很多内容只用语 ...

  7. BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络

    对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...

  8. HDU 1023 Train Problem II( 大数卡特兰 )

    链接:传送门 题意:裸卡特兰数,但是必须用大数做 balabala:上交高精度模板题,增加一下熟悉度 /************************************************ ...

  9. %02x与%2x之间的区别

    输出最小宽度用十进制整数来表示输出的最少位数.若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时). X 表示以十六进制形式输出02表示不足两 ...

  10. Vue PC端框架

    Vue PC端框架 1. Element 中文文档:http://element-cn.eleme.io/#/zh-CN github地址:https://github.com/ElemeFE/ele ...