水陆距离 HihoCoder - 1478 (BFS)

这是一篇关于使用BFS算法解决寻找给定二维矩阵中每个陆地单元格到最近水域距离的问题。博客介绍了题目的输入输出格式,并提供了一个通过广度优先搜索的解决方案,但初次尝试因超时而失败,后来优化后发现只需要从一个水域开始搜索即可确保找到最短距离。
摘要由CSDN通过智能技术生成

水陆距离 

给定一个N x M的01矩阵,其中1表示陆地,0表示水域。对于每一个位置,求出它距离最近的水域的距离是多少。  

矩阵中每个位置与它上下左右相邻的格子距离为1。

Input

第一行包含两个整数,N和M。

以下N行每行M个0或者1,代表地图。

数据保证至少有1块水域。

对于30%的数据,1 <= N, M <= 100  

对于100%的数据,1 <= N, M <= 800

Output

输出N行,每行M个空格分隔的整数。每个整数表示该位置距离最近的水域的距离。

Sample Input

4 4  
0110  
1111  
1111  
0110

Sample Output

0 1 1 0  
1 2 2 1  
1 2 2 1  
0 1 1 0

题目大意:0为水域,求各点到水域的最小距离

思路: 比赛看到这道题就想着用BFS ,标记所有0,并从0开始广搜,更新最小距离d[i][j]  

但是交上去超时了,想办法想办法剪枝后还是不行,就先去做其他题了

然后发现从一个0的点开始搜索就够了  因为当前的点都是距离最小的 所以它下一步到达的点一定也会是最小的 

代码:
 

#include<stdio.h>
#include<string.h>
#inc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值