DFS BFS 总结

这两三天做了不少DFS,BFS题。。

首先是BFS。。

1001.赤裸裸的BFS....注意标记。。否则会MLE,RUNTIME ERROR。。BFS要占用非常多的内存。。

不断入队。而DFS。。则容易TLE,需要根据题意剪枝,回溯。

1002 诡异的楼。变换了下。。电梯方向可以根据时间的奇偶性来判断。

同是要用优先队列。。按时间从小到大排序。。

1003 knight moves..非常裸的BFS。。8个方向。处理好输入就没什么问题啦

1004 asteriods.. 三维空间的BFS。。6个方向。没有什么变化。

1005 rescue..刚开始一看题,感觉非常简单。一交wa,才明白朋友可能有多个。。应该从a搜索r..同时也要用优先队列。。选出最少时间

1006 连连看。。这题关键是要记录每个点的方向。。和转折次数。还要剪枝。。。用mark二维数组来记录每个点的转折次数。

1007 nightmare..这题不能用简单的走过的点标记。。有可能某过点经过之后再次经过。。所以可以用生命值来剪枝。

开个hash二维数组。。初始话为0.。。。起点为6,能走的点条件是它的生命值大于hash[x][y]...碰到4.重新赋值6.。。

1008 嘿嘿。这题太暴力了。。每次6种可能入队。。写的我异常烦燥。改错误该了好久。幸好最后AC了。。真的要冷静再冷静。。

DFS:

1001  这题没有奇偶剪枝。。果断TLE。。。有了奇偶剪枝。。我忘记加。。if (flag) return; 继续TLE。

1002  这题裸的。不需剪枝

1003 这题也裸。关键在如何传递参数。把参数设置好了就不会有什么问题。

1004 这题注意去重。。 if (x < i && A[x] == A[x-1]) continue; 要理解好递归函数调用机制

1005 对搜索过的点记忆下。很好的一题。。

1006 下沙下面的。需要回溯标记已访问的点。然后枚举每一种可能。然后选出最小的。

1007 和1006类似。

1008 变形课。。我把它转换成邻接矩阵来搜索。最后写了个有返回值的DFS。。一直wa..写错了悲剧。旭帮我。改成void 型就AC了。还是没有完全理解好递归函数的机制。

无论是BFS。还是DFS。。都是盲目式的搜索。枚举每一中可能。。剪枝。。找到所求解。等以后有充足时间了好好看下启发式搜索。。

posted on 2011-08-12 20:37  more think, more gains  阅读(523)  评论(0编辑  收藏  举报

导航