HDU1495(bfs)】的更多相关文章

非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10349    Accepted Submission(s): 4143 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要…
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) .聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的…
广搜的灵活应用题: 非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3633    Accepted Submission(s): 1514 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意:有三个杯子,开始时第一个杯子装满水(体积为a),倒来倒去,得到其中2个杯里的水的体积都为a/2,求最小次数,不存在就输出NO. 分析:因为被子没有刻度,所以倒入时要倒满或倒完才能保证知道容积,即有6种情况来分别遍历. #include <iostream> #include <cstdlib> #include <queue> #include <vect…
  非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3510    Accepted Submission(s): 1440 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一…
思路:搜索题,第一次做这种类型的题目吧,一开始表示不怎么明白题意所说的东东.其实就是要你判断可乐能不能被平分........ 有六种状态,从a瓶到b瓶,a-->c b-->a     b-->c c-->a     c-->b 然后每种状态里面又分两种不同情况,可以将此瓶的水全部清空,不能清空...... 然后广搜就可以了........ #include<iostream> #include<stdio.h> #include<string.h…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16814    Accepted Submission(s): 6805 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyo…
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) .聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的…
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1495/ 题意:给定三个杯子S,M,N,满足S=M+N,现在要求用最短的次数将S杯中的饮倒平分到两个杯子中.我们首先想到这个问题需要用搜索来解决,由于杯子没有刻度,所以每次倒水都是要将一个杯子中的水倒光或者将另一个杯子倒满,我们就这样在状态空间中搜索,直到check通过.由于是根据倒水的次数进行的层次搜索,所以最终确定的倒水次数一定是最少的次数.这道题竟然因为“NO”的“O”没有大写被卡,心态爆炸,什么是否能不…
题目链接:http://poj.org/problem?id=3414 题意:给你两个容器 A  B 问是否能够经过有限的步骤倒水,得到容量为 C 的水,输出最小的步数,同时输出每一步的操作.如果不能达到目标状态,则输出  impossible. 分析:这题跟hdu1495一样,需要分情况考虑,不过这里回溯输出路径... 具体分析情况看这里:http://www.tuicool.com/articles/fqeI3i #include <cstdio> #include <cstring…
题目链接:https://vjudge.net/problem/HDU-1495 转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6750320.html 题目大意: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S…
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则任选一个访问之:反之,退回到最近访问过的顶点:直到与起始顶点相通的全部顶点都访问完毕: 3.若此时图中尚有顶点未被访问,则再选其中一个顶点作为起始顶点并访问之,转 2: 反之,遍历结束. 连通图的深度优先遍历类似于树的先根遍历 如何判别V的邻接点是否被访问? 解决办法:为每个顶点设立一个“访问标志”…
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Submit][Status][Discuss] Description The pasture contains a small, contiguous grove of trees that has no 'holes' in the middle of the it. Bessie wonders…
传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25290 Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 10…
传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11109 Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be f…
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而Helen达到(1,2),这种情况也算是相遇. #include<bits/stdc++.h> using namespace std; ][] = {{-, }, {, }, {, -}, {, }}; ][][][]; ]; int n,m; ][]; struct Node{ int x1,…
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++.h> using namespace std; struct Node{ int num;//储存状态 vector<int> path;//储存操作 }; ]; int click(int i, int num){ ; switch(i){ :tmp = num ^ ; break;//点…
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h> using namespace std; bool isPrime(int n){//素数判断 || n == ) return true; else{ ; ; i < k; i++){ ) return false; } return true; } } ]; ]; void getPrime…
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以参考,其可用数学归纳法证明:http://www.cnblogs.com/1-2-3/archive/2011/04/25/generate-permutation-part2.html #include <bits/stdc++.h> using namespace std; map<in…
此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int op_a(int n) {//操作A(上下行互换) ; ; + high; } int op_b(int n) {//操作B(每次以行循环右移一个) ; ; ; high = h * + high / ; ; low = l * + low / ; + low; } int op_c(int n) {//操作C…
//POJ3083 //DFS求靠左墙(右墙)走的路径长+BFS求最短路 //Time:0Ms Memory:716K #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; #define MAX 45 #define INRANGE(x,y) (x >= 0 && x < n && y…

BFS

广(宽)度优先搜索算法(Breadth-First-Search):  BFS是从根节点开始,沿着树的宽度遍历树的节点.如果所有节点均被访问,则算法中止.遍历过程如图,一层一层的找(在访问图中某一起始顶点 v 后,由 v 出发,依次访问 v 的所有未访问过的邻接顶点 ....直到图中所有的点都被访问,访问过程中,需要访问的点压入队列). (才开始学,也没什么见解,只是把点记下了)…
From: AOJ 0121 思路:与前几题的bfs不同,这次的bfs没有明确的移动对象,看似任意一个数都可以当成对象移动.这时我们只需要抓住一个格子就行,比如我们把0作为移动对象,那么0在地图中漫游所有的格子得到的肯定就是问题的解空间.由于题目的输入是多个case,如果对每个case都运行一遍bfs就会TLE.这时我们祭出dp技能,只需要一次bfs就将解空间算出来,以后每个case只要到解空间中去找就行了. #include <iostream> #include <string>…
POJ 3669 去看流星雨,不料流星掉下来会砸毁上下左右中五个点.每个流星掉下的位置和时间都不同,求能否活命,如果能活命,最短的逃跑时间是多少? 思路:对流星雨排序,然后将地图的每个点的值设为该点最早被炸毁的时间 #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; #define INDEX_MAX 512 int…
在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次),且老鼠只能吃硬度不大于当前体力值的奶酪. 老鼠从当前格走到相邻的无障碍物的格(上下左右)需要时间1单位,有障碍物的格不能走.走到工厂上时即可吃到该工厂的奶酪,吃奶酪时间不计.问吃遍所有奶酪最少用时. 输入:第一行三个整数H(1 <= H <= 1000).W(1 <= W <=1000…
#include <stdio.h> #define INF 32767 typedef struct MGraph{ ]; ][]; int ver_num, edge_num; }MGraph; void create_graph(MGraph *graph) { int i, j; getchar(); ; i < graph->ver_num; ++i) scanf("%c%*c",&(graph->vertexs[i])); ; i &l…
Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u  Practice  Description standard input/output Ayutthaya was one of the first kingdoms in Thailand, spanning since its foundation in 1350 to…
BFS算法与树的层次遍历很像,具有明显的层次性,一般都是使用队列来实现的!!! 常用步骤: 1.设置访问标记int visited[N],要覆盖所有的可能访问数据个数,这里设置成int而不是bool,基于一个考虑,多次循环时不用每次都清空visited,传递进去每次一个数字即可,比如第一次标记为1,判断也采用==1,之后递加即可. 2.设置一个node,用来记录相关参数和当前的步数,比如: struct node { int i; int j; int k; int s;//步数 }; 3.设计…
直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯子不能有水,倒的时候也要注意别超过了倒进去的杯子的容积. a->b || a->c || b->a || b->c || c->a || c->b #include <cstdio> #include <cstring> #include <q…
直达 -> POJ 3414 Pots 相似题联动–>HDU 1495 非常可乐 题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径.注意a,b互倒的时候能不能倒满,或者还有剩下的. a->b || b->a || a->0 || b->0 || a->A || b->B (0<=a<=A&&0<=b<=B) 思路:虽说是BFS但是情况就这几种,分别写出来之后判断即可.输出路径可以用递归,我这里用…