为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

USACO/maze1

来自NOCOW
跳转到: 导航, 搜索

[编辑] 分析

我们用一个数组记录每个格子四面连通情况,然后从输入文件中读入每条边(判断),维护这个数组。然后分别从两个出口做Flood fill,记录每个格子的最短距离。所有格子的最短距离的最大值为所求。//如果你发现数组越界了,很可能是做flood fill的时候出口没关


可以将整个图用2*w+1,2*h+1的布尔数组表示,门口处记为一步,最后统计所有偶数行列,输出max div 2 源码 --Lsylsy2 16:24 2007年8月2日 (CST)



还可以把两个出口分别作为起点,分别将整个地图走两遍,此时求出两次每个点到两个出口的最短距离中短的一个,再找出最短距离最长的一个点。


注意
第一组数据中
+-+
   // 这行空格(本行有3个空格)
+-+

使用广搜实现Flood Fill更快一点 //但是用dfs flood fill也是可以过的 时间也不算慢


可将地图看为一个图,有一个额外的点表示出口,记可以到出口的一个或两个点到出口距离为1,其余的相邻联通点之间距离记为1(用bool数组即可),然后用堆优化的Dijkstra算法,只用一遍,就可求出各点到出口的最短距离,找出其中最长的即可,效率还不错。


可以只做一次BFS, 把两个出口同时加入队列。


[编辑] 参考代码

C

C++

pascal

Java

[编辑] 引用

[1]

[2]

个人工具