
算法-搜索
文章平均质量分 81
冷翼凌云
这个作者很懒,什么都没留下…
展开
-
2.1.4 部分和问题(深度优先搜索基础)
深度优先搜索(DFS,Depth-First Search)是搜索的手段之一。它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解。例如求解数独,首先在某个格子内填入适当的数字,然后再继续在下一个格子内填入数字,如此继续下去。如果发现某个格子无解了,就放弃前一个格子上选择的数字,改用其他可行的数组。根据深度优先搜索的特点,采用递归原创 2018-02-05 10:57:00 · 537 阅读 · 0 评论 -
2.1.4 Lake Counting (POJ 2386) 深度搜索
我的思路:对每一个 'W' 进行处理,使与之挨着的 'W' 都替换 '.' ,然后递归,直至这个 'W' 周围的所有 'W' 都被替换成 '.' ,每进行上述操作一次,即有一个水洼存在,直至遍历所有的 'W'。我的代码:#include#define MAX_N 110#define MAX_M 110int a[MAX_N][MAX_M];int m,n;int原创 2018-02-05 10:57:02 · 187 阅读 · 0 评论 -
解救小哈(深度搜索)
本题可以用深度搜索,也可以用广度搜索,相对来说,广度搜索更加简洁,但是为了学习深度搜索,故本题采用深度搜索。思路:依然是使用递归,一步一步向前试探,试探后再回溯,最后比较结果,即可得出答案。代码如下:#include#define MAX_N 100#define MAX_M 100int a[MAX_N][MAX_M];int p,q,n,m;int min=原创 2018-02-05 10:57:05 · 399 阅读 · 0 评论 -
解救小哈(广度搜索)
本题上次采用的深搜,这次试用广搜来解决。我的思路:用结构体来实现队列,并使用标记数组,先让起点坐标入队,然后依次让其余所有的点入队,进行判断,如果下一步不是障碍物,且没有越界,就让 tail 加 1 ,当下一步的所有可能的情况都入队后,再让head加 1,因为是使用的循环结构,所以可以让下一步可以走的坐标全部入队后,再依此做出判断,即实现广度搜索。本代码中有两次决定性的终止循环,第一次是找到终原创 2018-02-05 10:57:08 · 494 阅读 · 0 评论 -
炸弹人 (搜索)
第一行数据n,m表示地图的行和列,接下来的n行m列为地图,startx,starty表示小人的起点。本题可以采用深搜或者广搜,因为边界全为'#',所以本题不用考虑边界问题。深搜代码如下:#includeint max,num,mx,my;int v[30][30];char s[30][30];int getnum(int x,int y);int dfs(in原创 2018-02-05 10:57:29 · 358 阅读 · 0 评论 -
水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可。代码如下:#includeint a[51][51];int book[51][51],n,m,flag=0,top=0;void dfs(int x,int y,int front); struct note{原创 2018-02-05 10:57:34 · 396 阅读 · 0 评论