图论 搜索。。很喜欢dfs和bfs啊
文章平均质量分 73
apsara-jueying
阿里云菜鸟攻城狮
展开
-
hdu1495 非常可乐(灰常有意思的bfs)
这题代码有150行 但是基本是六中情况的重复了先说题目 给三个数字 s n m s=n+m s在1到100之间就是个倒水问题可以从第一个倒向第二个 类似的一共可以有六中到发现在要求最少经过多少步就能平分那么多水 首先剪枝是 如果s是奇数必然不行。一看到要求最少的步数就知道用bfs了我们用vis标记状态每个状态有三个整数组成 表示这三个杯子里的可原创 2013-01-22 14:36:52 · 411 阅读 · 0 评论 -
hdu1455 poj 1011 sticks
这道题poj 和hdu 上都有 我都不知道敲了多少遍了。。奇怪的是在hdu上 用qsort过了 用sort 居然T了。。。。。思路就是就可能的长度dfs 如果成功直接输入 然后break 因为长度要从小到大排序当然dfs前先判断这个长度是否能整除sum如果可以整除sum memset vis 后 dfs(i,0,n);dfs函数三个参数 要拼接的长度 当前还要拼原创 2013-01-22 14:32:33 · 457 阅读 · 0 评论 -
uva 11624 Fire!(迷宫问题加 着火 两次bfs)
一开始忘记标记bfs2的vis数组 T了一次bfs1 就是说 以着火点 bfs 标记一个数组 就是每个点着火的最小的时间bfs2 就是看到达那个点的时候 时间是不是小于着火时间 #include#include#include#includeusing namespace std;const int maxn=1001;const int inf原创 2013-01-22 14:33:31 · 1177 阅读 · 0 评论 -
hdu 1181 变形课 (dfs)
这个题目就是给一堆字符串 但是有用的只有 第一个字母和最后一个字母其实就是个搜索 用map[26][26]表示 一个图 如果可以从某个字母到另一个的话 标记 map中那个位置为1;最后看能不能从b 到 m直接从b dfs 一直看 访问一个就标记 1 反正是最基础的dfs了, 直接敲完就AC了#include#include#include#include原创 2013-01-22 14:35:54 · 382 阅读 · 0 评论 -
uva 10047 The Monocycle(多状态和优先队列的bfs)
这个题目真的很有意思啊要求用最少的时间按从起点到终点每走一步 车轮的颜色变一次 假设初始为0 一共五种颜色 最终的颜色必须要是0;到达终点的朝向不要求这个状态要四维的 x y d cd表示朝向c表示当前的颜色那么更新的时候 要么朝着朝向d走一步要么左转或右转一共三种更新方法用四维vis数组记录是否访问过然后用优选队列 时间最少的先原创 2013-01-22 14:31:27 · 360 阅读 · 0 评论 -
hdu 1242Rescue(bfs+优先队列)
这个题还没有敲 稍微看了一下别人的代码觉得这个题太好了,特别有意思题意就是 给一个矩阵有强 有敌人 有angel 有friendsfriends可能有多个 但是hdu一个就能水过我们还是按照正确的解法来考虑r要到达a 中间可能会遇到x x是敌人 需要1单位时间去消灭我们要求出最少的时间使得a被营救那么r如果经过某一个点 消灭了一个敌人 就会有额外的时间这样队列中 我原创 2013-01-22 14:38:22 · 349 阅读 · 0 评论 -
POJ 1088滑雪(dfs的方法)
一道非常经典的题目 poj 上提交了6w+次 ac了两万+次。很老的了。先是题意 n*m的矩阵找到最长的递减路径的长度 路径可以是从一个点 到相邻的四个点 但是下一个点必须比这个点小记得是暑假写的 两种办法 第一是经典的动态规划 另一种是dfs两种方法都是16ms过的 但是dfs的代码更短 其实dp的代码用个技巧也可以比较短的先说df原创 2013-01-22 14:55:29 · 314 阅读 · 0 评论 -
hdu 1253 胜利大逃亡 (三维bfs)
这个题目还是没有太大难度的,如果想成是二维的话 那么就很简答了完全没有难度的bfs三维了仅仅是数组多开了一维而已。还有用一个数组 mintime标记一下到达某个点的最小时间 如果当前比最小时间要小才更新#include#include#includeusing namespace std;const int maxn=51;const int inf=1原创 2013-01-22 14:34:42 · 466 阅读 · 0 评论 -
poj 3984 迷宫问题(bfs)
这个题目也是暑假在家写的这么看 就是说给一个迷宫 找出从左上角到右下角的最短路当然题目已经说的够简单明了了 就不废话了但是这个题还要记录路径所有用prex[x][y]表示xy点的前一个点的x坐标同理 prey[x][y]表示xy点的前一个点的y坐标vis[7][7]标记是否已经访问过当时用的方法就是把矩阵的原创 2013-01-22 14:54:30 · 295 阅读 · 0 评论 -
LA 3702 network(greedy + dfs)
这个题也是好久以前看过的。就是用贪心的思想去dfs题目要求是 给出一棵树 然后给出vod服务器的标号 和这种服务所能到达的层数k。所有叶子节点都是客户端 非叶节点是服务器 现在要选出尽量少的服务器,使得所有客户端享受到vos服务。o把无根数转换为有根数有利于解题。。。现在有一个现成的根 就是最原始的vod服务器编号然后 读入的时候 把每个节点相邻的节点保存到vector 如果siz原创 2013-03-31 12:50:54 · 551 阅读 · 0 评论 -
poj 3259 Wormholes
这个题意好坑爹。。。完全看不懂看了别人的意思才理解了。题意就是 给出 一个图 m个无向边 w个有向边 有向边的权值是负的 现在要看图中有没有负权回路。只要bellman—ford就行了。不用管起点终点 如果n-1次松弛后还能松弛说明有负权环 #include#include#includeusing namespace std;const int maxn=10原创 2013-01-19 21:54:40 · 281 阅读 · 0 评论 -
poj 2243 Knight Moves(bfs,象棋中马从一个点跳到另一点的最少步数)
就是一个比较普通的bfs 只是换了一个有意思的方法 就是按照象棋里面马走日的规矩走。所以dir数组是这样 按照逆时针方向给出 int dir[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};然后 node 是坐标和目前为止所用的步数然后注意把 输入 的s[0]-'a' 和 s[1]-'1';原创 2013-02-04 17:23:33 · 3281 阅读 · 0 评论 -
1116 Play on Words
随便看hdu 看到的 就做了一下 前两天刚做过类似的 就是并查集看图是不是连通 然后判断是否可以构成欧拉通路并查集没啥讲的了。 还有用一个exist数组 记录 图中是否有这个点这次的欧拉通路是有向图 不用开两个数组 直接用degree记录 出度减去入度的值 所以每次输入一个单词 其实就是输入一条从首字符指向最后一个字符的边 首字符的degree++最后一个字符的 degree原创 2013-01-26 20:36:15 · 365 阅读 · 0 评论 -
hdu 1016 Prime Ring problem(dfs 素数环)
这个题目要求就是用1-n 这n个整数构成一个换 使得环中每个数和相邻的两个数分别相加 和是素数 从1开始按照字典序输出 直接dfs想法是 数组arr 存这个环中的数字 从下标0开始vis【i】表示 i是否被用过后来在算法竞赛入门经典里面也看到过这个题目 蛮经典的#include#include#includeconst int ma原创 2013-01-23 18:01:46 · 264 阅读 · 0 评论 -
hdu 1010 Tempter of the Bone(dfs 剪枝)
这种好搜索题就应该立马再敲一遍!首先 地图用bool 数组足以 只要表示能走还是不能走然后以字符串形式输入 或者开头结尾加 getchar();标记起点和终点的位置。把起点位置标为1 意思是不可走 然后开始dfs 不用返回值标记一个全局bool变量 一旦发现 置为1 剩下全return第一个剪枝 就是 空的地方比可用的时间都烧 直接挂第二个剪枝 就是 用的时间超过了T 直接挂掉第三个 最重要的原创 2013-01-23 18:05:55 · 284 阅读 · 0 评论 -
hdu 1241 Oil Deposits(水水的dfs)
简单的dfs 但是在读书数据的时候 getchar出了问题 所以还是读书字符串比较靠谱一点。就是给一个矩阵 有0 或 1 对于每一个0来说 和邻接的8个点 的0组成一个团。问一个给定矩阵中有多少个这样的团。大概就是这个意思。直接 双重循环 找到0点就dfs 把从这个点能到大的店都标记1 然后再找0点dfs 最后看看一共能找到多少个#include#include#in原创 2013-01-23 18:04:15 · 270 阅读 · 0 评论 -
uva 10054 The Necklace(欧拉回路加输出路径)
这个题目要把一个颜色想成一个点 如果有一节项链 有两个颜色a b 那么就在点 ab加加两条边我们最终要把这些项链穿起来 也就是说形成一条欧拉回路 走过所有的边并且所有的边只走一次。我就是非常奇怪为什么输出欧拉回路时一定要用栈。真是奇怪。。。//判断是否为欧拉回路 如果是就输出一条欧拉回路。//无向图 先看每个点的度 如果有奇度点 直接br原创 2013-01-24 16:28:02 · 507 阅读 · 0 评论 -
uva 10000 - Longest Paths(bellman_ford算法过)
这个题目太坑爹。。。昨儿用dfs狂T。下面先来正确代码 一会儿错误代码也附上 求大神帮我看看dfs 为什么会T 我觉得复杂度一样T了之后我就看网上说用Bellman_ford算法 也是求单源最短路的算法。但是比dijkstra强的是 图中可以有负权不过效率真不怎么地 O(n*m)吧可是我就奇怪的我的dfs也是 这个复杂度啊怎么就T了呢原创 2013-01-24 16:26:14 · 530 阅读 · 1 评论 -
LA 3027 - Corporative Network(经典的并查集和 路径压缩)
我刚突然明白路径压缩是干啥的了并查集 的 findset(int a)不是一路追随直到根节点么路径压缩就是适用于 只要找根节点 不用关心路径的情况下 直接记录 fa[a]=根节点就行了再说这个题目 n个节点 初始时是n颗数 给两种操作 一种是 I u v 表示u的父节点是v u 和 v的距离是差的绝对值 00;一种是 E u表示询问 u到根节点距离是多少原创 2013-01-24 16:34:05 · 360 阅读 · 0 评论 -
LA 3644 X_Plosives(并查集)
题目意思是说 往仓库放东西 每种东西两个元素组成如果放入一个东西后 仓库里 存在k中东西由k种元素组成 就会爆炸 会引起爆炸的拒绝放入给出一堆东西的组成元素 求出决绝放入仓库的东西的总数一开始理解错题意了 蛋疼了好久 还以为仓库里一共有k中商品 k中元素才拒绝其实不是 只要存在任何一种情况 k中元素组成了k个东西就爆炸其实也就是说出现了环原创 2013-01-24 16:34:49 · 396 阅读 · 0 评论 -
poj 3249 Test for Job(拓扑排序+DP)
这个做过的经典而且难忘的题目 本来是劲点决赛的倒数第二道题。题意就是给一个有向图 每个节点有权值。找到 入度为0的点 到出度为0的点。 更新权值。 要求权值尽量大就是拓扑排序加一个 if(dp[pos]+profit[t]>dp[t]) dp[t]=dp[pos]+profit[t];#inc原创 2013-01-24 16:27:07 · 329 阅读 · 0 评论 -
poj2513 Colored Sticks(tire树+路径压缩并查集+欧拉通路)
偶尔看到的这个题目。。实在是太屌了。。一道题包含三个内容。。首先题意是 给出一堆木棍 每个木棍两段各有一种颜色。然后把这些木棍连成长木棍。然后 连接处必须颜色相等。因为不是练成圈 所有是欧拉通路就行。这个题目考查三个地方。第一个是欧拉通路 一个条件是 所有点的度数要么全是偶数 要么有两个是奇数第二个地方是并查集 因为欧拉通路的 另一个条件是 这个图当然得是联通的。。判连通性直接并原创 2013-01-25 22:47:52 · 474 阅读 · 0 评论 -
DUT 1039: STRING(将一个字符串转换成另一个 floyd求最短路)
市赛题 开始老婆说这题好像很简单。。我就按照她说的简单的敲了。。wa了好几次。。后来又好好理解了一次题意。给两个长度相等的字符串 从第一个转换到第二个。对应相同位置转换 如果一样 就不用转了 否则要一定的cost cost是一个常量k但是有一些转换 是幸运的 有固定的常量 现在问 从a到b 两个字符串转换 最少的cost老婆一直在提醒我最小的。。我也没好好想。wa的不行了才想到原创 2013-04-24 14:25:23 · 645 阅读 · 0 评论