http://poj.org/problem?id=3278

题目大意就是在同一坐标轴上给你一个人的坐标,一个牛的坐标,而人的运动每一次运动有三种方式,一种是后退1,一种是前进1,还有一种是坐标翻倍,问最短的运动次数

这是我所接触的第一个BFS也就是广度优先搜索,在网上看了几篇博客,发现一篇的是最好理解的,然后我就照着做了,也A了

 #include <stdio.h>
#include <iostream>
#include <queue>
#include <string.h> using namespace std; #define max 200040         queue<int >q;          //定义一个队列,用来存每次所到达的位置 int step[max];        //用来存到达某个位置时,所用的步数
int next,head,m,n;
bool road[max];        //但每次人走过之后,就记住这个地方已经被走过,因为之后在走这个地方的时候,步数肯定比第一次走的时候要多 int dfs()
{
q.push(m);        //首先把m也就是人的起始位置进队,然后对其的步数和位置进行标记
step[m]=;
road[m]=true;
while(!q.empty())    //当队列中没有元素时就结束循环
{
head=q.front();    //head在这里代表着你此时此刻的位置
q.pop();
for(int i=;i<;i++)    //因为要3种选择,所以用一个循环来进行,每走一次,如果之前没有走过,那么就进队列。如果走过,就跳过。
{                //而当每一次做出选择之后,都会有三个选择来进行下一步,而这三个选择,步数是相同的,之前没走过的,就进队
if(i==) next=head-;    
else if(i==) next=head+;
else next=*head;
if(next>max||next<) continue;
if(road[next]==false)
{
q.push(next);
road[next]=true;
step[next]=step[head]+;
}
if(next==n) return step[next];    //人到达了牛的位置,返回当前位置的步数
}
}
return ;
}
int main()
{
memset(road,false,sizeof(road));    //对road这个标记是否走过的数组进行初始化
scanf("%d%d",&m,&n);
if(m>=n) printf("%d",m-n);        //当人在牛的右边的时候,则人只可能有一种走法,也就是向左走,那么步数也就是二者相差的距离;
else printf("%d",dfs());
return ;
}

在poj上,用C++交就runtime error,用G++交就AC了,有时候同一段代码,用G++和C++交所对应的时间和内存都是不同的,这或许与二者的机制有关

POJ 3728的更多相关文章

  1. poj 3728(LCA + dp)

    题目链接:http://poj.org/problem?id=3728 思路:题目的意思是求树上a -> b的路径上的最大收益(在最小值买入,在最大值卖出). 我们假设路径a - > b ...

  2. POJ 3728 The merchant(并查集+DFS)

    [题目链接] http://poj.org/problem?id=3728 [题目大意] 给出一棵树,每个点上都可以交易货物,现在给出某货物在不同点的价格, 问从u到v的路程中,只允许做一次买入和一次 ...

  3. [最近公共祖先] POJ 3728 The merchant

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4556   Accepted: 1576 Desc ...

  4. poj 3728 The merchant(LCA)

    Description There are N cities in a country, and there is one and only one simple path between each ...

  5. poj——3728 The merchant

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5055   Accepted: 1740 Desc ...

  6. poj 3728 The merchant 倍增lca求dp

    题目: zdf给出的题目翻译: 从前有一个富饶的国度,在这里人们可以进行自由的交易.这个国度形成一个n个点的无向图,每个点表示一个城市,并且有一个权值w[i],表示这个城市出售或收购这个权值的物品.又 ...

  7. [POJ 3728]The merchant

    Description There are N cities in a country, and there is one and only one simple path between each ...

  8. POJ 3728 The merchant(LCA+DP)

    The merchant Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total ...

  9. POJ - 3728:The merchant (Tarjan 带权并查集)

    题意:给定一个N个节点的树,1<=N<=50000 每个节点都有一个权值,代表商品在这个节点的价格.商人从某个节点a移动到节点b,且只能购买并出售一次商品,问最多可以产生多大的利润. 思路 ...

随机推荐

  1. 跨区域的application共享问题。

    @1 new Thread(){ @Override public void run() { getConnect(); } }.start(); 如果我们的一个的应用程序有俩个入口.那么如果我们在这 ...

  2. Xshell中文版使用说明/下载

    个人本来一直用SecureCRT的这几天朋友推荐用xshell就尝试下载了一个结果发现这个比SecureCRT和puttytel好使多了切更能更完善强大特此推荐附带注册码一枚可装999台机器 1309 ...

  3. jQuery 遍历 - find() 方法

    实例 搜索所有段落中的后代 span 元素,并将其颜色设置为红色: $("p").find("span").css('color','red'); 详情:htt ...

  4. root用户自动登录

    编辑文件: /etc/gdm/custom.conf的内容: 1 # GDM configuration storage      2       3 [daemon]      4 #GtkModu ...

  5. jQuery属性选择器.attr()和.prop()两种方法

    在判断表单单选框是否被选中时,通常会想到使用$('#checkbox').attr('checked')来判断,但在一些情况下,你会发现这种方法并不管用,得到的是undefined. 原来jQuery ...

  6. 工具介绍 - NimbleText

    非常实用的工具, 即使不是程序员也有必要掌握这个简单的小工具. 这个工具有桌面版和在线版两个版本. 桌面版地址: http://nimbletext.com/ 在线版地址: http://nimble ...

  7. glusterFS分布式文件系统的搭建

    准备工作 1.安装IBA yum install libradmacm librdmacm-devel libmlx4 infiniband-diags 2.配置IPOIB /etc/sysconfi ...

  8. Windbg学习使用

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1. WinDbg介绍:    Debuggin ...

  9. MySQL监控系统MySQL MTOP的搭建(转VIII)

    MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...

  10. CSS DIV HOVER

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...