【HIHOCODER 1478】 水陆距离(BFS)
描述
给定一个N x M的01矩阵,其中1表示陆地,0表示水域。对于每一个位置,求出它距离最近的水域的距离是多少。
矩阵中每个位置与它上下左右相邻的格子距离为1。
输入
第一行包含两个整数,N和M。
以下N行每行M个0或者1,代表地图。
数据保证至少有1块水域。
对于30%的数据,1 <= N, M <= 100
对于100%的数据,1 <= N, M <= 800
输出
输出N行,每行M个空格分隔的整数。每个整数表示该位置距离最近的水域的距离。
样例输入
4 4
0110
1111
1111
0110
样例输出
0 1 1 0
1 2 2 1
1 2 2 1
0 1 1 0
题解
以水域为起点,使用bfs搜索,一旦一个水域搜到一个陆地,其它水域就不必搜到这个陆地,因为这已经是最短路了
import java.util.*;
import java.io.*;
public class Main {
static final int N = 810;
static final int M = (int) 7e5 + 10;
static final int inf = 0x3f3f3f3f;
int[][] ans = new int[N][N];
char[][] a = new char[N][N];
int[][] book = new int[N][N];
int n, m;
class node {
public int x, y, step;
node() {
};
node(int tx, int ty, int s) {
x = tx;
y = ty;
step = s;
};
}
int nex[][] = { { 0, 1 }, { 1, 0 }, { -1, 0 }, { 0, -1 } };
Queue<node> q = new LinkedList<>();
void bfs() {
node u = new node(), v = new node();
while (!q.isEmpty()) {
u = q.poll();
if (a[u.x][u.y] == '1')
ans[u.x][u.y] = Math.min(ans[u.x][u.y], u.step);
for (int i = 0; i < 4; i++) {
v.x = u.x + nex[i][0];
v.y = u.y + nex[i][1];
if (v.x >= n || v.y >= m || v.x < 0 || v.y < 0)
continue;
if (book[v.x][v.y] == 1)
continue;
book[v.x][v.y] = 1;
v.step = u.step + 1;
q.offer(new node(v.x, v.y, v.step));
}
}
}
void solve() {
Scanner sc = new Scanner(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
n = sc.nextInt();
m = sc.nextInt();
for (int i = 0; i < n; i++)
Arrays.fill(ans[i], inf);
for (int i = 0; i < n; i++) {
a[i] = sc.next().toCharArray();
for (int j = 0; j < m; j++) {
if (a[i][j] == '0') {
q.offer(new node(i, j, 0));
ans[i][j] = 0;
}
}
}
bfs();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (j > 0)
out.print(" ");
out.print(ans[i][j]);
}
out.println();
}
out.flush();
}
public static void main(String[] args) {
Main a = new Main();
a.solve();
}
}
【HIHOCODER 1478】 水陆距离(BFS)的更多相关文章
- HihoCoder - 1478 水陆距离
水陆距离 描述 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 第一行包含两个整数, ...
- hihocoder1478 水陆距离
地址:http://hihocoder.com/problemset/problem/1478 题目: 水陆距离 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个 ...
- hihocoder offer收割编程练习赛9 B 水陆距离
思路: 宽搜,多个起点. 实现: #include <iostream> #include <cstdio> #include <algorithm> #inclu ...
- 【[Offer收割]编程练习赛9 B】水陆距离
[题目链接]:http://hihocoder.com/problemset/problem/1478 [题意] [题解] 一开始把所有的水域的位置都加入到队列中去; 然后跑一个bfs. 第一次到达的 ...
- [BZOJ2252]矩阵距离(BFS)
题意 输入矩阵m行n列(m<=500,n<=500),只含0.1,输出离每个元素距离最近的1的距离,其中距离定义为D(aij,akl)=abs(i-k)+abs(j-l). 示例: 输入: ...
- H - 遥远的糖果 HihoCoder - 1478
给定一个N x M的01矩阵,其中1表示人,0表示糖.对于每一个位置,求出每个位置离糖的最短距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. Input 第一行包含两个整数,N和M. 以下 ...
- Codeforces Round #361 (Div. 2) B bfs处理
B. Mike and Shortcuts time limit per test 3 seconds memory limit per test 256 megabytes input standa ...
- [Offer收割]编程练习赛9,10
题目1 : 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差. ...
- hdoj 2196 Computer【树的直径求所有的以任意节点为起点的一个最长路径】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- hdu1068 Girls and Boys 基础匈牙利
#include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> ...
- java webRoot 路径问题
项目部署后的目录结构 src 生成到 WEB-INF\classes文件下; WebRoot 为项目的根目录,应用中“/action”就相当于是系统目录中的”WebRoot/action" ...
- 跟我一起玩Win32开发(16):ListView的多个视图
在上一个例子中,我们只用到了ListView的Report视图,也就是详细视图.本文我们再把上一篇文章中所用的例子进行一下扩展,例子源码可以到俺的资源区下载. 我们为ListView中显示的数据加上图 ...
- 数组Reduce的应用
数组Reduce的应用 参考 简单应用 var arr = [1,2,3,4,5] var sum = arr.reduce(function (prev, cur, index, arr) { co ...
- java 环境变量的设置,备忘
新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0变量名:CLASSPATH 变量值:.;%JAVA ...
- D. The Door Problem 带权并查集
http://codeforces.com/contest/776/problem/D 注意到每扇门都有两个东西和它连接着,那么,如果第i扇门的状态是1,也就是已经打开了,那么连接它的两个按钮的状态应 ...
- E. Xenia and Tree 分块 + LCA
http://codeforces.com/contest/342/problem/E 如果把询问1存起来,每到sqrt(m)的时候再处理一次. 那么总复杂度就是msqrt(m)的. 把要变颜色的节点 ...
- JVM线程与Linux内核线程的映射[转]
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...
- HTTP协议 处理流程
我们平时在浏览网页的时候都是使用浏览器,输入你要的网址后回车,就会显示出我们所想要的内容,看似这个简单的用户操作行为的背后,Web的工作原理是怎样的呢?到底隐藏了些什么呢? 对于传统的上网流程,系统它 ...
- QProcess执行带管道的shell命令
QStringList options; options << "-c" << "ls -l | grep a | sort"; QPr ...