数据结构:DFS
文章平均质量分 65
skajre
这个作者很懒,什么都没留下…
展开
-
uva 572 Oil Deposits
#include #include #include using namespace std; const int maxn=100+5; char pic[maxn][maxn]; int buf[maxn][maxn]; int m,n; void dfs(int r,int c,int id) { if(r=m||c=n) return ; if(pic[r][c]!='@'原创 2016-05-25 19:45:42 · 191 阅读 · 0 评论 -
UVA 1374 Power Calculus(IDA*)
之前用普通dfs做的,然后只看了书上的翻译,没看题目,然后就坑了,这题之前产生的x^y都是可以用的,我一开始做以为只能平方,加一和减一。 #include int max(int a,int b) {return (a>b)?a:b;} int n,a[20]; int maxdd=13; bool dfs(int d,int maxd) { if(a[d]==n) return tru原创 2016-10-08 14:10:34 · 217 阅读 · 0 评论 -
UVA 1377 Ruler(dfs)
这题目自己写一直WA,后来发现正确搜索枚举的刻度并不一定是题目中给你的,而可能是两个刻度中间隔的,枚举完整之后答案就会完备而且可能会更优。#include #include #include #include #include using namespace std; const int maxn=50+5; int vis[maxn],d[maxn],id[1000000+10],a[maxn]原创 2016-10-08 12:49:36 · 279 阅读 · 0 评论 -
UVA 1267 Network(dfs)
先把s节点作为根节点,建立一棵树,k层以上是不用管的,把k层以下的叶子结点放到node数组中,最下面的叶子结点网上走k-1层,然后当前节点作为根,建树,重复循环知道所有的点都没覆盖为止。// // main.cpp // Richard // // Created by 邵金杰 on 16/9/30. // Mail:1016427040@qq.com or jasonshaosjj@gm原创 2016-09-30 13:03:12 · 222 阅读 · 0 评论 -
UVA Chinese Mahjong(暴力枚举+模拟)
每种牌只有34种,所以可以直接暴力枚举,然后先找出两张做将,然后接下来枚举三张做刻子或顺子就可以了。// // main.cpp // Richard // // Created by 邵金杰 on 16/9/29. // Mail:1016427040@qq.com or jasonshaosjj@gmail.com // Copyright © 2016年 邵金杰. All righ原创 2016-09-29 19:27:03 · 258 阅读 · 0 评论 -
UVA 1352 Colored Cubes(暴力搜索枚举)
一个正方体只要确认上顶面和前面的两个面就能被确定下来,那么上顶面有六种情况,在上顶面被确认的前提下,前面有四种情况,所以一个正方体通过旋转一共有24中姿态,只要把这可能的26种姿态的排列,打印出来,然后在主函数里枚举匹配即可。 下面是枚举可行排列的代码:#include #include #include #include using namespace std; int Left[6]={4,原创 2016-09-29 13:29:28 · 201 阅读 · 0 评论 -
UVA 10825 Anagram and Multiplication(暴力枚举)
这题用next_permutation也能过,之前子集写枚举全排列,然后用暴力方法配对写崩了= =。 需要注意的只有一点,因为枚举的是最优一位,所以最后一位是固定的,枚举全排列也是枚举第前m-1位的全排列。#include #include #include #include using namespace std; const int maxn=10; const int maxm=400+1原创 2016-10-11 15:13:07 · 314 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone(dfs+奇偶剪枝)
// // main.cpp // Richard // // Created by 邵金杰 on 16/9/24. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include using namespace std; const int maxn=10+5; char m原创 2016-09-24 23:35:17 · 149 阅读 · 0 评论 -
HDU 5887 Herbs Gathering(01背包搜索)
#include #include #include #include using namespace std; const int maxn=100+10; typedef long long ll; ll w[maxn],v[maxn]; ll r[maxn]; ll n,k; ll ans,t; int cmp(const int i,const int j) {return (double原创 2016-09-20 23:58:15 · 186 阅读 · 0 评论 -
POJ 3256 Cow Picnic(DFS)
水题,dfs搜索。 // // main.cpp // Richard // // Created by 邵金杰 on 16/8/14. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include using namespace std; int arrivetime[10原创 2016-08-14 10:45:52 · 268 阅读 · 0 评论 -
POJ 1011 Sticks(dfs+剪枝)
// // main.cpp // Richard // // Created by 邵金杰 on 16/8/31. // Copyright © 2016年 邵金杰. All rights reserved. // #include #include #include #include #include using namespace std; vector stick; con原创 2016-09-01 11:18:05 · 195 阅读 · 0 评论 -
POJ 3984 迷宫问题
用vector保存路径好像写错了,一直输出错误,但却改不出来,以后确定路径的问题还是用dfs时搜一遍吧。#include #include #include #include #include #include using namespace std; int a[10][10],vis[10][10]; struct node{ int x,y; node(int x,int y原创 2016-07-20 23:58:25 · 121 阅读 · 0 评论 -
百练 4124 海贼王的伟大航路
这里所需要的剪枝一共有三种 1.若走到现在的路程已经大于等于之间扩展的最优路程,则剪枝; 2.设一个估计函数,这个估计函数是现在已经还没有走的点,若有c1,c2...cn,则取终点为c1的最短路径,到c2的最短路径....到cn的最短路径,他们之和相加若仍然大于等于之前扩展的最优路程,那么就不用继续扩展这条路了; 3.设定一个状态,这个状态定义了f(v,s),v代表目前已经走到过的城市终原创 2016-07-20 21:38:42 · 882 阅读 · 0 评论 -
POJ 1724 ROADS
#include #include #include #include #include using namespace std; struct node{ int v,l,t; }; const int maxn=100+10; const int maxl=10000+10; vector p[maxn]; int k,n,r; int cost,bestcost; int vis[m原创 2016-07-20 20:35:33 · 194 阅读 · 0 评论 -
POJ 1190 生日蛋糕
主函数尽量少写,都放到dfs里面去#include #include #include #include #include using namespace std; const int maxn=20+5; int minV[maxn],minA[maxn],maxV[maxn]; int area,bestarea=100000000; int m,t; int maxVforNRH(int n原创 2016-07-20 08:47:11 · 210 阅读 · 0 评论 -
POJ 1164 The Castle
#include #include #include #include using namespace std; int d[55][55],vis[55][55]; int c; void dfs(int i,int j) { if(vis[i][j]) return ; c++; vis[i][j]=1; if(!(d[i][j]&1)) dfs(i,j-1);原创 2016-07-19 20:09:08 · 188 阅读 · 0 评论 -
ZOJ 2110 Tempter of the Bone
比赛的时候写的 #include #include int flag,sx,sy,ex,ey,num; int n,m,t,vis[10][10]; int dx[]={-1,0,1,0}; int dy[]={0,-1,0,1}; char map[10][10]; int abs(int p) { return p>=0?p:-p; } void dfs(int x,int原创 2016-06-11 07:49:50 · 214 阅读 · 0 评论 -
邻接表的dfs遍历
//输入样例 /* 5 0 AB AD AC CD BE DE */ //输出 /* Please Input the edge x-->y:AB AD AC CD BE DE A 1 2 3 B 0 4 C 0 3 D 0 2 4 E 1 3 */ //dfs测试数据 /* 8 0 Please Input the edge x-->y:AB原创 2016-05-06 18:26:47 · 938 阅读 · 0 评论 -
HDU 1213 How many table(dfs)
#include using namespace std; const int maxn=1000+5; bool map[maxn][maxn],used[maxn]; int n,m; void dfs(int u) { for(int v=1;v<=n;v++){ if(map[u][v]&&!used[v]){ used[v]=true;原创 2017-01-24 12:15:00 · 281 阅读 · 0 评论