ACM的第二乐章--BFS
bfs和dfs一样,也是以树形搜索形状进行的,只不过dfs是以树根开始一个个的搜索,而bfs则以步数、层次展开搜索,也就是从树根一层层的向外拓展。这种拓展需要的空间一般都是指数级的,所以不能像dfs一样灵活搜索,往往都是在一定的剪枝策略下展开的,因而bfs一般适合求解最优解。
标志性的bfs里会有一个队列,队列里的状态是理解bfs过程的关键,一般来说,队列里存储的是等待拓展的状态,这些等待拓展的状态是很难知道先后关系的,但是队列里的层次、步数的状态肯定是从队头到队尾递增的,往往我们求解的就是这些递增的状态。
Catch That Cow
http://poj.org/problem?id=3278
重判一下就好了, 可以知道,每个点最好就是只进行一次拓展,但每个点第一次拓展后得到的解是最优的,所以当第一次拓展后,就把这个点标记为访问拓展过了。可以知道队列是最多有1000000个状态,空间不会是问题。
Find The Multiple
http://poj.org/problem?id=1426
简单bfs,这个可能和数学分析有点关系,由于这个数并不大(<=200),所以可以以这个数的余数为状态来进行bfs,所求得的数最多是400,当然,题目难在要进行路径搜索。
Prime Path
http://poj.org/problem?id=3126
建好图后,可以bfs,也可以spfa ,两个差不多一样的。
Nightmare
http://acm.hdu.edu.cn/showproblem.php?pid=1072
重判每个点能有的最大时间,不断以最大的拓展。
胜利大逃亡(续)
http://acm.hdu.edu.cn/showproblem.php?pid=1429
状态压缩重判,记录每个点每个状态的最小时间。
魔板
http://acm.hdu.edu.cn/showproblem.php?pid=1430
先打表,映射一下,cantor重判
单词联想
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1308
单bfs过不了时就想到双bfs了,看过一些代码,感觉和单bfs也差不多
代码见:http://www.cnblogs.com/aigoruan/archive/2012/06/21/2557271.html
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号