【题解】POJ3083 Children of the Candy Corn(DFS + BFS)

POJ 3083 Children of the Candy Corn


明天写

前言

许久没有写博客了,因为要考研大部分的时间都用来学数学英语了。然后机缘巧合下找到了份还行的实习,所以又开始学算法数据结构了,那就写写题解记录一下。

正文

这是这几天做到两道理解比较深刻的水题(其实也没那么水吧)其中之一。花了比较多的时间,然后在网上看了不少题解,感觉都有点不清晰,所以这边记录一下同时谈谈自己的理解。(昨天写了个标题今天就有三十的阅读,一定认真写这篇)

原题

题干太长就不贴了,直接点这里去POJ或者VJ上看原题。
样例这里贴一下:

Sample Input:
2
8 8
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#...#..#
#S#E####
9 5
#########
#.#.#.#.#
S.......E
#.#.#.#.#
#########
Sample Output:
37 5 5
17 17 9
这边再给两个样例:
2
3 3
###
S.#
#E#
5 10
#####
#...E
#..#.
#..#.
#..#.
#...#
#....
#.##.
#S#..
#####
//output:
//3 3 3
//11 21 11

题解

这题的意思是说给你一个起点和终点,’#‘是墙,’.'是路。要求三种路径的长度,一种是左转优先,一种是右转优先,最后是最短路径。

思路:这题刚看思路应该是很清晰的,左右优先的用DFS,最短路径用BFS,事实上也确实如此。但是在一些细节方面如果处理不好的也比较麻烦(比如我交了十四次才AC)。

讲几个难到我的点:开始我是想用一个包含参数mode的表达式来控制左右优先,后来试了很久,发现这不是我可以攻克的难题,于是就退一步用了个if。然后在广搜的时候怎么记录步长又难倒我了,后来看了网上的题解才想起来可以在结构体里记录,很菜。其他好像也没什么难点了,果然菜是原罪。

直接上code,我注释写的还算详细,觉得不错的话点个赞呗,如果有什么地方不清楚的话请私信我,欢迎交流。

Code

// POJ3083 Children of the Candy Corn.cpp

#include <iostream>
#include <queue>

using namespace std;

struct Position
{
   
	int x, y, dep;	// x记录的是第几列,y记录的是第几行。这个得注意下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值