抓住那头牛(POJ3278)
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上
,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)
。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要
花多少时间才能抓住牛?

广搜算法
广度优先搜索算法如下:(用QUEUE)
(1) 把初始节点S0放入Open表中;
(2) 如果Open表为空,则问题无解,失败
退出;
(3) 把Open表的第一个节点取出放入
Closed表,并记该节点为n;
(4) 考察节点n是否为目标节点。若是,
则得到问题的解,成功退出;
(5) 若节点n不可扩展,则转第(2)步;
(6) 扩展节点n,将其不在Closed表和
Open表中的子节点(判重) 放入Open表的尾部
, 并为每一个子节点设置指向父节点的指针(
或记录节点的层次) ,然后转第(2)步。

#include<iostream>
#include<queue>
#include<string>
#include<malloc.h>
using namespace std;

#define MAX_SIZE 10000//查询最大的范围
int visited[MAX_SIZE];//标记那个位置是否已经走过了
struct Node
{
	int x;//位置
	int step;//走到这个位置所需要几步
	Node(int a=0,int b=0):x(a),step(b){}
};

queue<Node> open;

//广度优先搜索,类似于一层一层的去遍历查找
int main()
{
	cout<<"输入农夫的位置N(0<=N<=100000):"<<endl;
	int N;
	cin>>N;
	cout<<"输入牛的位置K(0<=K<=100000):"<<endl;
	int K;
	cin>>K;

	memset(visited,0,sizeof(visited));
	Node N_start(N,0);//人位置.
	Node K_caw(K,0);//牛位置.
	int min_step;//最终的最少的步骤.
	Node N_step(0,0);//中间存储变量.

	N_step=N_start;
	open.push(N_step);//将开始的位置输入到队列中
	visited[N_start.x]=1;

	while(!open.empty())
	{
		N_step=open.front();//取出队列头的元素,进行判断
		open.pop();
		if(N_step.x==K)//若是找到了则跳出循环
		{
			min_step=N_step.step;
			break;
		}
		else
		{
			//加1的位置元素
			if((N_step.x+1<MAX_SIZE)&&visited[N_step.x+1]==0)
			{
				visited[N_step.x+1]=1;
				open.push(Node(N_step.x+1,N_step.step+1));
			}
			if(N_step.x-1>=0&&visited[N_step.x-1]==0)//减1的位置元素
			{
				visited[N_step.x-1]=1;
				open.push(Node(N_step.x-1,N_step.step+1));
			}
			if(N_step.x*2<MAX_SIZE&&visited[N_step.x*2]==0)//*2的位置的元素
			{
				visited[N_step.x*2];
				open.push(Node(N_step.x*2,N_step.step+1));
			}
		}
	}
	cout<<min_step<<endl;
	system("pause");
	return 1;
}

  

Catch The Caw——(广度优先搜索的应用,队列)的更多相关文章

  1. Catch That Cow(广度优先搜索_bfs)

     Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 48036   Accepted: 150 ...

  2. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  3. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  4. 队列的JS实现及广度优先搜索(BFS)的实现

    队列是先进先出(FIFO)的数据结构,插入操作叫做入队,只能添加在队列的末尾:删除操作叫做出队,只能移除第一个元素.在JS中,用数组可以很简单的实现队列.JavaScript实现排序算法 functi ...

  5. 图的广度优先搜索(BFS)

    把以前写过的图的广度优先搜索分享给大家(C语言版) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 ...

  6. 广度优先搜索(BFS)

    定义 维基百科:https://en.wikipedia.org/wiki/Breadth-first_search 给定图G=(V,E)和一个可识别的源结点s,广度优先搜索对图G中的边进行系统性的探 ...

  7. 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较

    广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...

  8. SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...

  9. 广度优先搜索BFS

    广度优先搜索可以形成一个广度优先搜索树 算法时间为O(V+E),两重循环 输入:图g,起点start(int) 需要的数据结构:队列Q.color数组(存放每个顶点的颜色) 算法过程: 1. 预处理: ...

随机推荐

  1. 多路复用IO和异步IO

    多路复用I/O 它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程. 流程图如下: 当用户进程调用了sel ...

  2. re正则表达式公式讲解6

    标识符 re.I (re.IGNORECASE) 忽略大小写 import re s = "Max@123uyt146" print(re.search("m" ...

  3. ios 设置head请求头,自定义head, read response header

    AFHTTPSessionManager *manger = [AFHTTPSessionManager manager]; manger.securityPolicy = [AFSecurityPo ...

  4. Oracle逻辑备份与恢复(Data Pump)

    1. 备份的类型 按照备份方式的不同,可以把备份分为两类: 1.1 逻辑备份:指通过逻辑导出对数据进行备份.将数据库中的用户对象导出到一个二进制文件中,逻辑备份使用导入导出工具:EXPDP/IMPDP ...

  5. [Tunny]Git常用命令与入门

    [黄映焜/Tunny,20140709] Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制..g ...

  6. SSAS 系列01- DAX公式常用公式

    计算第一次购买时间 CALCULATE(FIRSTDATE(FactInternetSales[OrderDate]),ALLEXCEPT(FactInternetSales,FactInternet ...

  7. iOS端架构、基本组成与使用说明

    一. app整体描述 app的描述:需求文档+接口文档+程序架构. 说明:新入手的开发人员必须拿到这三个说明文档才能整体了解app功能. 二.app架构描述 1.架构视图 2.分层结构说明 [1] a ...

  8. svn批处理语句

    sc create SVNService binpath="O:\ProgramingSoftware\SuiVersion\bin\svnserve.exe --service -r E: ...

  9. android 近百个源码项目【转】

    http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多 ...

  10. JavaSE-30 BigDecimal类的使用

    问题 Java(其他编程语言也存在类似问题)中浮点数直接进行算术运算会导致精度丢失. 示例代码: System.out.println("1.0 - 0.9 =" + (1.0 - ...