随笔分类 - DFS / BFS
HDU1755
摘要:这道题直接暴力枚举复杂度为 n!*m但是k 2 #include 3 #include 4 5 using namespace std; 6 7 int vis[10] , n , m , x , k , num[10] , dp[102][102]; 8 const int INF = 1...
阅读全文
POJ 1321
摘要:dfs 简单题 1 #include 2 #include 3 #include 4 using namespace std; 5 int vis[9][9]; 6 int mat[9][9],n,k,ans; 7 8 void dfs(int x,int y,int t) 9 {10 ...
阅读全文
CSU 1259 bfs找最短路
摘要:题目大意:不想介绍,题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1259bfs求最短路。这里因为2-9,到达同样的点不计步数,那我们不能每次bfs都遍历一个图找到所有相同的点,所以这里用vector[10],保存对应的2-9的相同的节点...
阅读全文
HDU 4478 Where is King
摘要:题目大意:一个王可以向周围8个方格走,如果都不通留在原地,t秒后,他可能存在的位置数这题数据量过大,我们需要通过奇偶性判断,如果t = 0可以到达,说明 t=2,4,6.。。。都可以到达所以我这用dp[N][N][2] 来记录x,y位置上奇数和偶数时间分别到达那点的最短时间,如果不存在,用-1表示 ...
阅读全文
ZOJ1004 && HDU1515 dfs回溯
摘要:题目大意:就是通过一个栈进行字母入栈出栈得到想要的字符,把所有可能的方式全部输出自己写的方法一开始一直不能过,后来参考了别人的方法,写出来的比较简单的代码这段代码更有回溯的感觉,自己后来又把自己原来想法的代码写了一遍,终于写出来了,不过有点让人头晕 1 #include 2 #include 3...
阅读全文
HDU 1016 素数环问题
摘要:题目大意:给定1-n这n个数,组成以1开头的素数环,保证相邻两个数相加均为素数题目用dfs搜索再回溯,这样碰到不成立的立刻退出递归,就减少了很多步骤,不然暴力来就是n!次复杂度,肯定是超时的每次添入数据都要判断是否相邻数相加为素数,所以我们可以提前打个素数表,这样使自己判断素数更加方便 1 #inc...
阅读全文
HDU1241&POJ2386 dfs简单题
摘要:2道题目都差不多,就是问和相邻所有点都有相同数据相连的作为一个联通快,问有多少个连通块因为最近对搜索题目很是畏惧,总是需要看别人代码才能上手,就先拿这两道简单的dfs题目来练练手,顺便理一理dfs的思路,分析清楚dfs的退出递归的条件和什么时候进行递归调用是至关重要的,这两道题目不涉及回溯,对于需要...
阅读全文
POJ 1321 dfs
摘要:在棋盘上放置棋子使它们任意两个都不在同一行或同一列dfs(x,k)表示的是访问到第x行已放置了k个棋子这道题我们以每行或者每列为单位来看题,每次搜索都对一整行进行访问,并在安置棋子的点的列位置上使其visit[col]=1如果放置成功那么dfs(x+1,k+1),再进行回溯不论是否成功,都要dfs(...
阅读全文
POJ 1191 DP+DFS棋盘分割问题
摘要:题目大意:Description将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值...
阅读全文
HDU 1078 dfs+dp
摘要:题目大意:在n*n的矩阵中,每个格子放置了一定数量的食物,一只老鼠每次水平或竖直最多移动k格,每次到的位置食物都要比前一次多,问最后一共能得到多少食物这道题利用记忆化搜索做,利用nowstate不断记录下一个位置所能到达的最大值,利用nowstate+mat[i][j](当前区域中所含的食物数量)得...
阅读全文
HDU 1278
摘要:题目大意:从(1,1)到(n,n),每经过一个点都要花费一定的时间,问花最短时间的路径有多少条dfs+dp先用bfs把所有到n花费的时间逆向dp计算一遍再用dfs不断找到前一个对应的较短路径的点不断搜索路径 1 #include 2 #include 3 #include 4 using na...
阅读全文
HDU 4499
摘要:题目大意:N*M的棋盘上摆了一些棋子,在剩余位置上尽可能多的摆上炮,使所有炮不能互吃dfs+回溯 1 #include 2 #include 3 #include 4 #define max(x,y) x>y?x:y; 5 using namespace std; 6 int a[30],b[...
阅读全文
HDU 4597
摘要:题目大意:两人轮流从两堆牌从抽取最顶端或者最底部的牌,得到的分数加到自己身上,问先拿牌的最多能得多少分记忆化搜索,2堆牌的底和顶,有四种方法,根据四种方法来找到最优解 1 #include 2 #include 3 #include 4 using namespace std; 5 int d...
阅读全文
迷宫问题
摘要:迷宫问题通常是采用bfs方法去做,而且利用队列保存所访问过的但还未进行操作的点,从一个点出发将整个图遍历一遍,遍历过程中通过事先保存的用二维数组代表的方向,每次遍历每个方向在迷宫问题中往往判断能否到达一个点,就是从你所要出发的点开始遍历,bfs完成后,去找那个点对应的visit值来进行判断而在bfs...
阅读全文
CodeForce 448C 木片填涂问题
摘要:题目大意:有多片木片需要填涂,可以每次横着涂一行,也可以一次涂一列,当然你涂一行时遇到中间长度不够高的木片,填涂到此中断这题目运用dfs能更容易的解出,虽然还是十分不容易理解 1 #include 2 3 using namespace std; 4 5 #define N 5010 6 in...
阅读全文
浙公网安备 33010602011771号