Catch The Caw——(广度优先搜索的应用,队列)
抓住那头牛(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——(广度优先搜索的应用,队列)的更多相关文章
- Catch That Cow(广度优先搜索_bfs)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 48036 Accepted: 150 ...
- SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- 队列的JS实现及广度优先搜索(BFS)的实现
队列是先进先出(FIFO)的数据结构,插入操作叫做入队,只能添加在队列的末尾:删除操作叫做出队,只能移除第一个元素.在JS中,用数组可以很简单的实现队列.JavaScript实现排序算法 functi ...
- 图的广度优先搜索(BFS)
把以前写过的图的广度优先搜索分享给大家(C语言版) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 ...
- 广度优先搜索(BFS)
定义 维基百科:https://en.wikipedia.org/wiki/Breadth-first_search 给定图G=(V,E)和一个可识别的源结点s,广度优先搜索对图G中的边进行系统性的探 ...
- 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...
- SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜 ...
- 广度优先搜索BFS
广度优先搜索可以形成一个广度优先搜索树 算法时间为O(V+E),两重循环 输入:图g,起点start(int) 需要的数据结构:队列Q.color数组(存放每个顶点的颜色) 算法过程: 1. 预处理: ...
随机推荐
- re匹配语法-match、search和findall
1.re.match() 匹配第一个值 列表里的值可以有多个范围,有一个符合就可以. match只匹配第一个值,所以列表里的范围是第一个值得取值范围.如果第一个值被设定好且存在,那么列表的取值范围变为 ...
- .htaccess重写规则失败
开启mod_rewrite.so LoadModule rewrite_module libexec/apache2/mod_rewrite.so 重启服务 sudo apachectl restar ...
- DROP DOMAIN - 删除一个用户定义的域
SYNOPSIS DROP DOMAIN name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP DOMAIN 将从系统表中删除一个用户域. 只 ...
- C-基础:冒泡排序
#include <fstream> #include <iostream.h> //--------------------------------------------- ...
- assembly|reads to contig|contig to scaffold|coverage|depth| tandem repeats
(组装方面):SOAPdenovo ,因为采用de Bruijn graph algorithm算法和stepwise strategy ,所以排错能力高,所以我们获得高质量数据. de Bruijn ...
- luogu P1407 稳定婚姻-tarjan
题目背景 原<工资>重题请做2397 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有 ...
- 我的MySql掉队了
本来今天高高兴兴,突然: raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)&qu ...
- 虚拟机如何设置静态IP
一.本机环境 Mac.VMware Fusion 10, CentOS6.8 二.设置静态IP地址 1.选择网络连接模式,选择NAT模式 注意: 1)必须要选择NAT模式,否则你的虚拟机与主机始终会在 ...
- Python爬虫-抖音小视频-mitmproxy与Appium
目的: 爬取抖音小视频 工具: mitmproxy.Appium 思路: 1. 通过 mitmproxy 截取请求, 找出 response 为 video 的请求. 2. 通过 mitmdu ...
- 教你轻松在React Native中使用自定义iconfont
在react-native项目中我们一般使用到 react-native-vector-icons(这里不介绍如何使用react-native-vector-icons按照官方文档即可)但是当reac ...