
-搜索
文章平均质量分 82
virgoDd
Good afternoon,good evening and good night
展开
-
POJ 3895 Cycles of Lanes(DFS)
Cycles of LanesTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 1062Accepted: 392DescriptionEach of the M lanes of the Park of Polytechnic University原创 2014-09-02 09:50:21 · 725 阅读 · 0 评论 -
POJ 1321 棋盘问题(DFS)
题意 中文简单的搜索题 标记列是否已经有子进行深搜即可 k可能小于n 所以每行都有放子或不放子两种选择 #include using namespace std;const int N = 10;int n, k, ans, v[N];char g[N][N];void dfs(int r, int cnt){ if(cnt >= k) ++ans;原创 2015-03-25 20:03:41 · 820 阅读 · 0 评论 -
UVa 11624 Fire!(BFS 逃离火灾)
题意 n*m的迷宫中有一些着火点 每个着火点上下左右相邻的非墙点下一秒也将成为一个着火点 Joe每秒能向相邻的点移动一步 给你所有着火点的位置和Joe的位置 问Joe逃离这个迷宫所需的最小时间可以先一遍bfs把每个点的最早着火时间存起来 只有Joe到达该点的时间小于这个时间Joe才能走这个点 只需要对Joe所在的点为起点再来一次bfs就行了 需要注意的是开始可能有多个着原创 2015-04-03 12:58:31 · 945 阅读 · 0 评论 -
POJ 1426 Find The Multiple(BFS 同余模定理)
题意 给你一个数n 输出一个仅由0,1组成的数m使得m是n的倍数找到一个m 是m%n==0 就行了 初始让m=1 然后bfs扩展m的位数 只有两种情况 m = m * 10 或 m = m*10 + 1; 同余模定理 (a+b) % c = (a%c + b%c) % c, (a*b)%c = (a%c * b%c) % c;运用同余模定理 可以只记录余数 这原创 2015-04-01 21:34:24 · 743 阅读 · 0 评论 -
FZU 2150 Fire Game(DFS+BFS)
题意 在n*m个格子组成的草地上 你可以选择两个是草('#')的格子点燃 每个点燃的格子在下一秒其四个相邻的是草的格子也会被点燃 问点燃所有的草至少需要多少秒DFS和BFS的综合 如果'#‘连通块的数量大于2个是肯定不能点燃所有的 先dfs判断连通块个数 再bfs找出选哪两个格子可以最快把草烧完#include #include #include using nam原创 2015-04-03 10:16:31 · 1266 阅读 · 0 评论 -
hiho一下·47 拓扑排序·一(判断是否能够Topo排序)
题意 中文简单的Topo排序 用vector实现邻接表比较方便#include using namespace std;const int N = 1e5 + 5;vector e[N];vector::iterator it;int n, m, ideg[N];bool topo(){ int cur; queue q; for(int i原创 2015-05-25 09:35:31 · 1624 阅读 · 0 评论 -
ZOJ 3761 Easy billiards (DFS性质)
题意 桌上有n个球 a球撞击b球时 a球停在b球位置 b球保持a球运动 若b球前面再没有球 b球就会掉下桌子 给你n个球的坐标 你可以多次选择某个撞击方向前面还有球的球撞击 问最后桌上至少还剩多少球 并输出你的撞击过程可以把x坐标或y坐标相同的点当作是连通的 因为可以通过撞击一个球使另一个球掉下桌面那么容易发现 一个连通块内的m个球总可以经过m-1次撞击后变成只剩一原创 2015-07-10 08:57:51 · 1036 阅读 · 0 评论 -
ZOJ 3436 July Number(DFS)
题意 把一个数替换为这个数相邻数字差组成的数 知道这个数只剩一位数 若最后的一位数是7 则称原来的数为 July Number 给你一个区间 求这个区间中July Number的个数从7开始DFS 位数多的数总能由位数小的数推出#include using namespace std;const int N = 1e6;int july[N], n;set ans;原创 2015-07-26 17:08:26 · 730 阅读 · 0 评论 -
HDU 1043 Eight (BFS·八数码·康托展开)
题意 输出八数码问题从给定状态到12345678x的路径用康托展开将排列对应为整数 即这个排列在所有排列中的字典序 然后就是基础的BFS了#include using namespace std;const int N = 5e5, M = 9;int x[4] = { -1, 1, 0, 0};int y[4] = {0, 0, -1, 1};int fac[] = {1原创 2015-07-05 17:00:28 · 1228 阅读 · 0 评论 -
POJ 3411 Paid Roads(DFS)
题意 你要从第1个城市到第N个城市去 有m条路 每条路用a, b, c, p, r 表示 你从第a个城市到第b个城市时 若之前经过或现在位于第c个城市 过路费就是p元 否则就是r元 求你到达第N个城市最少用多少过路费由于最多只有10个城市 10条路 这个题就变得很简单了 直接暴力dfs就行 可以用状态压缩来存储已经走过了哪些城市 由于最多只有10条路 从某个城市原创 2015-08-03 16:04:47 · 850 阅读 · 0 评论 -
POJ 1167 (DFS·剪枝·公交时刻表)
题意 你记录了[0, 59]这个时间段内到达你所在站牌的所有公交的到这个站牌的时间 对于每路公交1. 同一路公交的到站时间间隔是相同的2. 每路公交在这个时间段至少到达两次3. 最多有17路公交4. 两个不同路的公交的第一次到站时间和到站时间间隔都可能是相同滴5. 你在这个时间段内的记录是完整的求最少用多少路公交可以让你的记录合法由于每路公交至少到站两次 那么第一原创 2015-08-03 16:30:48 · 1883 阅读 · 0 评论 -
HDU 1495 非常可乐(BFS 倒水问题)
题意 将体积为s的可乐 利用容积分别为n和m的两个杯子平均分为两份 至少需要倒多少次可乐可以把容器s,n,m中装的可乐量看成一种状态 容器都是没有刻度的 所以每次倒可乐要么把自己倒完 要么把对方倒满 每种状态可以通过一次倒水到达哪些状态 于是可以通过bfs判断到达每种状态需要倒多少次 3个容器中有一个装的可乐为s/2的状态就是答案了 s是奇数时明显不可能平分的 可以原创 2015-04-01 09:39:11 · 2533 阅读 · 2 评论 -
HDU 2612 Find a way(双BFS)
题意 在n*m的地图中 ‘Y’和'M'两个人到某一家KFC(在地图上用"@'表示) 所需的最小时间和是多少 他们每走一步都要11分钟可以分别以y和m为起点进行一遍bfs 把到每个KFC的时间都存起来 最后看哪家KFC的时间和最小就行了#include #include #include using namespace std;const int N = 205;in原创 2015-03-31 23:16:45 · 1000 阅读 · 0 评论 -
UVa 572 Oil Deposits(DFS)
Oil Deposits The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and cre原创 2014-09-02 09:50:44 · 461 阅读 · 0 评论 -
POJ 1856 Sea Battle(DFS)
题意 图中每个矩形'#'连通块代表一艘船 若一艘船与另一艘有边相邻或有角相邻 那么认为这两艘船相撞 若图中有船相撞 输出bad 否则输出图中有多少艘船可以把图的周围全包上一圈'.' 遍历图中每个点 可知当图中存在一下四种结构中的一个时 必有船相撞 输出并退出循环 否则则dfs这个点 若图中不存在这些结构 就可以输出连通块数量即轮船数了#include原创 2014-09-02 09:51:39 · 608 阅读 · 0 评论 -
UVa 524 Prime Ring Problem(DFS , 回溯)
题意 把1到n这n个数以1为首位围成一圈 输出所有满足任意相邻两数之和均为素数的所有排列直接枚举排列看是否符合肯定会超时的 n最大为16 利用回溯法 边生成边判断 就要快很多了#includeusing namespace std;const int N = 50;int p[N], vis[N], a[N], n;int isPrime(int k){ fo原创 2014-11-20 16:42:21 · 1044 阅读 · 0 评论 -
UVa 140 Bandwidth(DFS 回溯 剪枝)
题意 有一个无向图 对于其所有顶点的一个排列 称一顶点与所有与其有边的其它顶点在排列中下标差的最大值为这个顶点的带宽 而所有顶点带宽的最大值为这个排列的带宽 求这个图带宽最小的排列枚举排列 ans记录当前找到的最小带宽 枚举过程中一旦出现带宽大于ans的也就不用再扩展了 这样枚举完就得到了答案#include#includeusing namespace std;c原创 2014-11-26 18:48:16 · 1085 阅读 · 0 评论 -
POJ 1077 Eight(BFS Hash)
题意 八数码问题还是八数码问题 只是要输出路径了#include#includeusing namespace std;const int M = 1000003;int e[9] = {1, 2, 3, 4, 5, 6, 7, 8, 0};int x[4] = { -1, 1, 0, 0}, y[4] = {0, 0, -1, 1};int dir[M], pre[M],原创 2014-12-18 12:36:52 · 914 阅读 · 0 评论 -
紫书p199 八数码(BFS,hash)
八连块问题 紫书上的简单搜索 渣渣好久才弄懂#include#includeusing namespace std;const int M = 1000003;int x[4] = { -1, 1, 0, 0}, y[4] = {0, 0, -1, 1};int dis[M], h[M], s[M][9], e[9];int aton(int a[]){ int t原创 2014-12-18 11:09:00 · 1301 阅读 · 0 评论 -
POJ 3279 Fliptile(状压搜索)
题意 把一个n*m矩阵中的1全部变成0所需的最少步数 改变某个格子时其相邻的4个格子也一起改变 只要知道第一行改变了哪些后面的就都确定了 因为上一行对应位置是1的位置必须改变 上一行是0的一定不能改变 所以可以根据第一行的状态推出后面所有行的状态 直到最后一行结束 如果最后一行不是全0的话 这种状态就是不可行的 那么我们只用枚举第一行的所有状态就够了 m#i原创 2015-03-27 11:21:29 · 1676 阅读 · 1 评论 -
CodeForces 327D Block Tower(DFS)
题意 给你一个城市的地图 你可以在地图上的 . 上建房子#上不能建房子 红房子可以装200个人 蓝房子可以装100个人 只有相邻位置有蓝房子时才能建红房子 你也可以拆掉已经建成的房子 拆掉后该点又变成 . 这题想到了就很容易了 因为没有限制要步数最少 可以先把左右的地方都建成蓝房子 然后就变成求连通块的题了 每个蓝房子连通块内依次拆掉建红房子 最终就只剩下一个蓝房子了原创 2015-03-10 23:25:09 · 910 阅读 · 0 评论 -
POJ 3126 Prime Path(BFS 数字处理)
题意 给你两个4位素数a, b 你每次可以改变a的一位数但要求改变后仍为素数 求a至少改变多少次才能变成b基础的bfs 注意数的处理就行了 出队一个数 然后入队所有可以由这个素数经过一次改变而来的素数 知道得到b#include #include using namespace std;const int N = 10000;int p[N], v[N], d[N],原创 2015-04-02 07:48:30 · 949 阅读 · 0 评论 -
POJ 3414 Pots(BFS 倒水)
题意 你有两个容积分别为a,b杯子 你每次可以将某个杯子中的水倒满或者倒掉或者倒到另一个杯子 问能否通过这两个杯子量出c容量的水和上一个倒可乐问题类似 只是这个操作更多了点 将两个杯子中各含有的水作为状态 每出队列一个状态 将所有可能到达的状态入队 直到有一个杯子里面水的体积为c 打印路径直接递归就行了#include #include #include usin原创 2015-04-02 17:11:48 · 1032 阅读 · 0 评论 -
HDU 2553 N皇后问题 (回溯法 递归·非递归)
题意 中文n*n的棋盘放n个皇后(攻击同行/列/主副对角线) 使任何两个都不互相攻击 有多少种方法枚举每一行 用vis[3][i]记录列 主对角线 副对角线是否被占 同列和对角线都没被占就继续枚举下一行 当枚举到n+1行的时候就是一个合法答案了 注: n*n的方阵中主对角线可以用(i-j+n)标号 副对角线可以用(i+j)标号//ans[]={0,1,0,0,2,10,4原创 2014-11-20 11:23:09 · 1155 阅读 · 0 评论