随笔分类 -  搜索

摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1356题意:给出一个起始点,一些边,有人从这个起始点开始随意走,问在某一个时候,它是否可以处于任意位置。思路:思考下,就可以明白,只要是一个联通图,并且存在奇数点形成的环,那么在某一个时候就可以处于任意位置。如何判断存在一个奇数点形成的环?染色法:就是给每个点进行标号,标为-1,1如果存在一条边连接的两个点标号相同,那么就是存在一个奇数环......代码:#include #include #include #include #include #include using namespace s 阅读全文
posted @ 2014-03-29 16:11 紫忆 阅读(1184) 评论(0) 推荐(0)
摘要:题意:在一个平面上,有若干个球,给出球的坐标,每次可以将一个球朝另一个球打过去(只有上下左右),碰到下一个球之后原先的球停下来,然后被撞的球朝这个方向移动,直到有一个球再也撞不到下一个球后,这个球飞出,球只能是朝上下左右四个方向打,并且要一个球四个方向都没有球了,这个球就不能打了。问说最少平面上剩几个球,并且给出打球的方案。思路:把四个方向可以连成一块的球用一个并查集连起来,有多少个并查集,最后就会剩下多少个球,然后就是从并查集的叶子节点往根结点输出路径。这里要注意,不能重复输出,还有就是,在击打球的时候,有一个先后顺序,我们输出的时候,必须严格按照这个顺序,就是说,每次必须先把父节点所有的枝 阅读全文
posted @ 2014-03-04 22:57 紫忆 阅读(737) 评论(0) 推荐(0)
摘要:这个题目,比较恶心,思路很是简单,就是模拟的时候有些麻烦......水题#include#include#includeusing namespace std;char s[100][100];int t[400][400],vist[400][400];int n,m;int p[13][3][3]={ { 0,1,0, 1,1,0, 0,0,0 }, { 0,1,0, 0,1,1, 0,0,0, }, { 0,0,0, 1,1,0, 0... 阅读全文
posted @ 2013-12-16 15:08 紫忆 阅读(515) 评论(0) 推荐(0)
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336There is an interesting calculator. It has 3 rows of buttons.Row 1: button 0, 1, 2, 3, ..., 9. Pressing each button appends that digit to the end of the display.Row 2: button +0, +1, +2, +3, ..., +9. Pressing each button adds that digit to the dis 阅读全文
posted @ 2013-12-16 14:27 紫忆 阅读(1582) 评论(0) 推荐(0)
摘要:题意:有个4*4的开关,里面有着16个小开关-+---------- '+'表示开关是关着的,'-'表示开关是开着的,只有所有的开关全被打开,总开关才会被打开。现在有一种操作,只要改变某个开关,那么这个开关的行列所在开关都会被改变-+-- 问,要打开总开关至少要改变多少次开关?并输出改变开关的位置。思路: 由于每个开关只有两种状态,那么对于这16个小开关,我们可以用2进制来压缩下,如果开关是打开的那么为'0',如果是关着的,那么为'1',如此,我们就可以从下到上,从右到左给这16个开关标记状态,如果以某个点为中心,那么这个点的行列 阅读全文
posted @ 2013-12-08 14:54 紫忆 阅读(1084) 评论(0) 推荐(0)
摘要:题意:有个4*4的棋盘,上面摆着黑棋和白旗,b代表黑棋,w代表白棋,现在有一种操作,如果你想要改变某一个棋子的颜色,那么它周围(前后左右)棋子的颜色都会被改变(白变成黑,黑变成白),问你将所有棋子变成白色或者黑色最少的步数。思路:状态压缩+搜索。对于#include#include#include#includeusing namespace std;int t[20]={ 51200,58368,29184,12544, 35968,20032,10016,4880, 2248,1252,626,305, 140,78,39,19,};int M=1q; nod... 阅读全文
posted @ 2013-12-08 14:30 紫忆 阅读(1195) 评论(0) 推荐(0)
摘要:题意:就是说,给出一个三行三列的数组,其中元素为1--8和x,例如:1 2 3 现在,需要你把它变成:1 2 3 要的最少步数的移动方案。可以右移r,左移l,上移u,下移dx 4 6 4 5 67 5 8 7 8 x思路:这是赤裸裸的康托展开了吧?不知道康托展开的同学可以百度百科........好吧,其实我想说的是,这个题目怎么分析出,要用到康托展开的。首先,遇到这样的题目,元素比较少,又可以用到搜索,但是状态数比较多,也就是说,我需要找到一种方式来压缩这些状态,使得... 阅读全文
posted @ 2013-12-08 14:18 紫忆 阅读(517) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2013-11-13 15:03 紫忆 阅读(187) 评论(0) 推荐(0)
摘要:题意:给出n个点,以及m条边,这些边代表着这些点相连,修一个电力站,若在某一点修一个站,那么与这个点相连的点都可以通电,问所有的点都通电的话至少要修多少个电力站........思路:最多给出的是35个点,那么若是搜索的话,就是2^35......考虑状态压缩剪枝,若某个点修电力站,那么周围的所有点都有电了....#include#include#includeusing namespace std;typedef long long ss;ss sa[40],t[40],p=1;int dfs(ss n,ss step,ss ans,ss ks,ss m){ if(ans==((pn) ... 阅读全文
posted @ 2013-09-20 19:12 紫忆 阅读(747) 评论(0) 推荐(0)
摘要:思路:有十个门,有十把钥匙,每把钥匙对应一个门,相同的门可以有多个。这样,我们就得按照状态来搜索,用0000000001代表第一个门有钥匙了,1000000000代表第十个门钥匙有了.......一次类推,可以用二进制来表示.......遇到钥匙,可以先拾起这个钥匙,用|;遇到门,可以判断是否有这个门的钥匙,把门状态位移后,&就好........#include#include#include#includeusing namespace std;int t[4][2]={1,0,-1,0,0,1,0,-1},vist[25][25][5000];char str[25][25];in 阅读全文
posted @ 2013-08-12 11:59 紫忆 阅读(927) 评论(0) 推荐(0)
摘要:思路:搜索题,第一次做这种类型的题目吧,一开始表示不怎么明白题意所说的东东。其实就是要你判断可乐能不能被平分........有六种状态,从a瓶到b瓶,a-->cb-->a b-->cc-->a c-->b然后每种状态里面又分两种不同情况,可以将此瓶的水全部清空,不能清空......然后广搜就可以了........#include#include#include#includeusing namespace std;int vist[105][105][105],a,b,c;struct node{ int a,b,c; int step;}s[105];int s 阅读全文
posted @ 2013-08-12 11:49 紫忆 阅读(2633) 评论(0) 推荐(0)
摘要:View Code 1 #include 2 using namespace std; 3 int a[11]={0,1,0,0,2,10,4,40,92,352,724}; 4 int main() 5 { 6 int n; 7 while(scanf("%d",&n)>0&&n) 8 { 9 printf("%d\n",a[n]);10 }11 return 0;12 }思路:由于题目数据量小,只有10个数据,可以用深搜搜索出来后,打表。深搜代码:View Code 1 #include 2 #include 3 usi 阅读全文
posted @ 2013-03-04 10:30 紫忆 阅读(273) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1010注意,这道题目是要恰好t时间到达,并不是在t时间内到达......思路:剪枝+dfs第一个剪枝我们可以想到,当剩下的步数大于剩下的时间的时候,狗是不能走到的;接下来我们来第二个剪枝:我们把map的奇偶性以01编号:0 1 0 1 0 11 0 1 0 1 00 1 0 1 0 11 0 1 0 1 00 1 0 1 0 1我们发现从0走一步一定走到1,从1走一步一定走到0。也就是说,如果当前的狗所在的坐标与D的坐标奇偶性不一样,那么狗需要走奇数步。同理,如果狗所在坐标与D的坐标奇偶性一样,那么狗需要走偶 阅读全文
posted @ 2013-02-08 16:43 紫忆 阅读(5533) 评论(0) 推荐(1)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2363题意:给你n点,m条路,每个点都有不同的高度,题目要求在高度差最小的情况下的最短路径。开始做这个题目时,我是用二次最短路在做的,回来发现思路错了,就参考了大牛代码,恍然大悟。只要对高度升序排序,然后枚举各个高度差下的最短路径代码:#include<iostream>#include<algorithm>using namespace std;#define p 1500000001int a[105],b[105],s[105][105],n;int main(){ int dj 阅读全文
posted @ 2012-11-24 11:34 紫忆 阅读(209) 评论(0) 推荐(0)