dfs
99度灰
这个作者很懒,什么都没留下…
展开
-
UVA 524 - Prime Ring Problem
题目大意:输入n,输出由1~n组成的素数环,素数环要求相邻的两个数的和为素数。环由1开始。 解题思路:dfs,当确认n个数时输出,否则去寻找下一个数,标记,取消。 ac代码: #include #include #include using namespace std; int a[20]={1}, n, vis[20], cnt=1; bool prime(int n)原创 2017-09-06 15:48:03 · 206 阅读 · 0 评论 -
UVA 208 - Firetruck
题目大意:输出从1走到n的所有方式。给出了不同数字之间存在道路可以走,给的数字可能超过n。 解题思路:dfs+bfs。单独用dfs来找路的话会超时,需要bfs来剪枝。剪纸的方式为,从n开始找所有连通的标记一下。题目样例给的格式是假的。。。其实路径的一行之间输,每两个号之间一个空格。 ac代码: #include #include #include using namespace原创 2017-09-06 15:58:01 · 248 阅读 · 0 评论 -
UVA 539 - The Settlers of Catan
题目大意:给出n个点,编号从0~n-1。给出m个关系,表示两点之间有连线。求不能走重复线最长的路线为多长。 解题思路:无向图,dfs走,如果两点之间有关系,将关系标记去除,从下一层回来以后再标记,进入下一层,每一层,判断到这个点的最长长度。 ac代码: #include #include #include using namespace std; int n, m, G[30]原创 2017-09-06 15:46:22 · 231 阅读 · 0 评论 -
UVA 196 - Spreadsheet
题目大意:一个电子表格,输入所有位置的表达式或数字,输出电子表格每个位置的值。 解题思路:拓扑排序+dfs。将每个位置作为点,如果该位置为表达式,则将表达式包含的位置作为一种二元关系。入度为0(既数字或原表达式后已经求出值)则不操作,否则,进入dfs求出该位置的值。dfs中会进入该位置表达式中的位置从而求解。一个重要的地方是(因为我不看题目。。。看了题目的不用往下看)因为他是很多行、列的,行原创 2017-09-06 15:40:55 · 295 阅读 · 0 评论 -
POJ 1088 - 滑雪
题目大意:中文题 解题思路:dp+dfs。dp保存步数以及标记是否走过。每个位置要去四周找一个比自身大的位置,如果有,位置移动继续判断,如果没有返回的步数为其四周最大的步数多1。 ac代码: #include #include #include using namespace std; int map[105][105], dp[105][105], R, C, Max; i原创 2017-09-06 15:36:58 · 216 阅读 · 0 评论 -
HDU 1198 - Farm Irrigation
题目大意:有11种水管放置的方式,给一个m*n的大农田,每块小农田有各自的水管放置方式,问至少需要多少个水源才能让所有小农田都有水流过其中的水管。 解题思路:dfs将11种方式的上下左右可通表示出来,如果其某个方向的放置放置可以与其对接就进入下一层并标记。并查集方式类似,将11种方式的上下左右可通表示出来,如果其某个方向的放置放置可以与其对接就合并,最后判断有几个集合。 dfs方法ac原创 2017-09-06 15:59:59 · 250 阅读 · 0 评论 -
UVA 10596 - Morning Walk
题目大意:判断是否可以一条路走回原点,不考虑孤立点。 解题思路:判断无向图的欧拉回路,dfs判断连通,有度数的则要有被连通标记过,因为有度数的不是孤立点,存在被标记的度数则要求为偶数。 ac代码: #include #include using namespace std; int map[205][205], du[205], t1, t2, vis[205], n, m, j原创 2017-09-06 15:04:01 · 228 阅读 · 0 评论 -
UVA 10562 - Undraw the Trees
题目大意:给出一个树状图,每个节点可以是任意字符,以'#'结尾,输出其先序遍历。 解题思路:用二维数组将整个树状图存下来,用dfs遍历,判断该字符下有分支‘|’,则去寻找其分支下‘-------’的最左端,右端根据长度以及字符来判断。在分支下的下寻找非空格进入dfs。 ac代码: #include #include using namespace std; int n, cnt,原创 2017-09-06 15:15:31 · 252 阅读 · 0 评论 -
UVA 10054 - The Necklace
题目大意:n个样例,每个样例有m个连接关系,问能否连接成一条项链。 解题思路:能否构成欧拉回路,看了little white代码,太厉害了。原来的想法是dfs进行将一个入口进入所有与之连通的都进行标记。后面判断时使用。反正各种错。然后看了little white的代码思路。建立关系,一个关系可能多次,无向图直接记录度数。判断所有度数是否都为偶数,如果是进入dfs输出走法,否则输出不能。dfs原创 2017-09-06 14:49:45 · 219 阅读 · 0 评论 -
UVA 10004 - Bicoloring
题目大意:n个节点编号从0~n-1。m个关系表示他们连在一起。要求给两种色对所有点进行着色。要求连在一起的不能同色。 解题思路:用二维数组存他们的关系,一个标记数组标记是否着色,着色以后的颜色。循环未着色的点作为参数进入dfs,所有与它有关系的点,如果已经着色,判断是否与它同色,同色则不能,未着色则着色上与之不同的颜色。并进入下一层的dfs。如果a与b连着,map[a][b]与map[b][原创 2017-09-06 14:49:11 · 246 阅读 · 0 评论 -
UVA 10129 - Play on Words
题目大意:给你若干个单词,问你是否能够将其连成一队,使得对于除最后一个外的单词每个都成立如下关系:前一个单词的最后一个字母与后一个单词的第一个字母一致。也就是单词接龙。每个单词可能出现多次。 解题思路:将每个单词作为一个有向边,26个字母作为结点,也就是判断图是否有欧拉通路。有向图的欧拉通路要求在连通的情况下,出起点终点外每个结点的入度等于出度。起点的入度比出度小一,终点的入度比出度大一。样原创 2017-09-06 09:27:30 · 222 阅读 · 0 评论 -
UVA 568 - Just the Facts
题目大意:输入n,求n的阶乘的结果从后往前第一个非0数的值。 解题思路:dfs中计算n的阶乘,每次往上传时,将后面的0去掉后,只保留五位数传上去。 ac代码: #include using namespace std; int n, temp; int prime(int n) { int sum; if (n == 0) return 1; else{ temp =原创 2017-09-06 09:21:52 · 244 阅读 · 0 评论 -
UVA 657 - The die is cast
题目大意:每一块由'*'和’X‘组成的算骰子的一个面,其中X代表点数1,如果有连在一起的X算一起算点数1,有些类似油田问题的计数方式。计算各个面的点数,排序输出。 解题思路:先将所有’*‘或'X'标记,然后bfs遍历,其中遍历到X时,dfs将连着一起的‘X’变为‘*’(这样就不会因为进入dfs标记为访问过后,在bfs里没法遍历整面)。最后输出。 ac代码: #include #in原创 2017-09-06 09:19:07 · 217 阅读 · 0 评论 -
UVA 216 - Getting in Line
题目大意:给你n台电脑,每条线可以连着两台电脑,求将所有电脑连起来最短需要多长的线(一条折线),每段线要另外再加16。 解题思路:全排列,取其中最短的情况即可。由1到n的全排列演变为下标就可以了。 全排列代码: #include #include using namespace std; int n, vis[1005], num[1005]; void dfs(int d) {原创 2017-09-06 09:18:26 · 242 阅读 · 0 评论 -
UVA 1189 - Find The Multiple
题目大意:输入一个1~200的数n,输出一个只由0和1组成,并且它被n整除。 解题思路:dfs,两个参数,一个参数为进入的层数,因为超过19层unsigned long long装不下,会爆炸。另一个参数为,这个数是否被整除。第一层用1判断是否整除,之后乘十,乘十加一。fin判断是否找到。 ac代码: #include using namespace std; typedef u原创 2017-09-03 18:08:42 · 360 阅读 · 1 评论