随笔分类 -  深度搜索

摘要:简单的DFS 有些大神有树形DP做的,效率要高很多。 若degree[i] > 2 ,则断开 i 与其父节点之间的边 和 degree[i] - 3 个子节点之间的边,其父节点 度 减一。 此时总消费增加 sum += (degree[i] - 2)*2; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #pragma comment(linker,"/STACK:102400000,102400000") 9 10 using namespace std;1 阅读全文
posted @ 2013-09-13 19:02 好小孩 阅读(246) 评论(0) 推荐(0)
摘要:简单的DFS。一开始把DFS里面的一个变量弄成 全局变量了,调试了半个小时才发现...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int MinStep; 10 11 int map[25][25]; 12 13 int h,w; 14 15 struct Point 16 { 17 int h,w; 18 }sp,ep,np; 19 20 int jh[] = { 0,-1, 1, 0}; 21 int j... 阅读全文
posted @ 2013-08-23 16:05 好小孩 阅读(142) 评论(0) 推荐(0)
摘要:枚举了所有状态 1800+ms过了...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int c[25][25];10 11 int MaxSum;12 13 bool MarkSubSet[25];14 15 void dfs(int cur,int ans,int Sum,int n)16 {17 if(cur > n)18 {19 int i,j,sum;20 for(i = 1,sum =... 阅读全文
posted @ 2013-08-23 10:09 好小孩 阅读(155) 评论(0) 推荐(0)
摘要:给出一个Max 和一串数字。将这一串数字分割成若干个数,其和为sum。求最接近但不超过Max的sum。。。 将这个sum及这若干个数输出来。 DFS + 打印路径 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 char SNum[10]; 10 11 struct N 12 { 13 int data,ans,pre; 14 N *l,*r; 15 }*root; 16 17 N *creat() 18 { 1... 阅读全文
posted @ 2013-08-22 19:44 好小孩 阅读(136) 评论(0) 推荐(0)
摘要:数独问题。给定其中的几个数,找出其他符合规则的数。保证所给数据合法。典型的DFS。 又是1A真爽。 首先用三个数组标记每列每行每个九宫格出现过的数字。然后DFS寻找可能的状态。跑了400+ms。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int sudoku[10][10]; 10 11 bool MarkDfs,hr[10][10],hc[10][10],hs[10][10]; 12 13 int JudgeS(int i,i... 阅读全文
posted @ 2013-08-22 09:27 好小孩 阅读(147) 评论(0) 推荐(0)
摘要:百年难得一遇的会做的中文题...... 每一次DFS都有两种状态 放或者不放 简单的DFS模板题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int n,k,sum;10 11 char map[10][10];12 13 bool HashH[10],HashW[10];14 15 void dfs(int h,int w,int kc)16 {17 int i,j;18 19 if(kc == k)20 {21 ... 阅读全文
posted @ 2013-08-20 10:35 好小孩 阅读(233) 评论(0) 推荐(0)
摘要:骑士的旅行。 骑士可以每次走一个‘日’字,就像中国象棋里面的马。 给出一个 p*q 的棋盘,每个格子只能走一次,是否存在一种方法可以遍历整个棋盘。如果有多种方法输出字典序最小的。 关于此题中的字典序: 骑士每一次都会有八个方向可以选择,每一次都选择字典序小的来DFS。这样最终结果就是字典序最小的。 int jp[] = {-1, 1,-2, 2,-2, 2,-1, 1}; int jq[] ={-2,-2,-1,-1, 1, 1, 2, 2}; 此为遍历时确定八个方向的数组。 #include #include #include #include #include #inc... 阅读全文
posted @ 2013-08-19 15:57 好小孩 阅读(182) 评论(0) 推荐(0)
摘要:1 #include<stdio.h> 2 #include<string.h> 3 4 int map[10][10],sum,n,m,vis[10][10]; 5 6 void seek(int mbn,int mbm) 7 { 8 int jn[] = {0,0,-1,1}; 9 int jm[] = {-1,1,0,0}; 10 int i,tn,tm; 11 for(i = 0;i < 4; i++) 12 { 13 tn = mbn+jn[i]; 14 tm = ... 阅读全文
posted @ 2013-02-27 19:49 好小孩 阅读(241) 评论(0) 推荐(0)
摘要:#include<stdio.h>#include<string.h>intmark,k,m,map[101][101],vis[101][101],h[105];voidseek(intmb){if(h[mb])return;elseh[mb]=1;inti,j;if(mark){printf("%d",mb);mark=0;}elseprintf("%d",mb);for(i=1;i<k;i++){if((map[i][mb]&&!vis[i][mb])||(map[mb][i]&&!vi 阅读全文
posted @ 2013-02-26 19:42 好小孩 阅读(177) 评论(0) 推荐(0)