使用广度优先所搜,用distance[i][j]表示点(i,j)到最近出口的距离

对于题目给出的数据,一开始(2,1)(2,4)的distance为1{从(0,0)开始计算},其它点的distance都为一个比较大的值,且把这两个点加入“搜索点集合”中

不断的从“搜索点集合”中“拿出”一个点,当这个点的distance+1小于它旁边的另一个点的distance时,就跟新另一个点的distance,且把另一个点加入“搜索点集合”中。当然,这两个点必须是联通的。

直到集合为空,然后找出最大的distance

下面说明算法时间效率为O(w*h)

注意运行时间与向集合中加入点的次数成线性关系

考虑到只有一个出口时,每一个点的distance值仅会被更新一次,而有两个出口时每一个点的distance值最多被更新两次,所以每个点最多被加入集合两次,效率为O(w*h)



Code
posted on 2008-12-21 16:56  刘永辉  阅读(247)  评论(0编辑  收藏  举报