这两三天做了不少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。。都是盲目式的搜索。枚举每一中可能。。剪枝。。找到所求解。等以后有充足时间了好好看下启发式搜索。。