博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shortest Distance from All Buildings
阅读量:6262 次
发布时间:2019-06-22

本文共 2476 字,大约阅读时间需要 8 分钟。

1 public class Solution { 2     public int shortestDistance(int[][] grid) { 3         if (grid.length == 0 || grid[0].length == 0) { 4             return -1; 5         } 6          7         int[] shift = new int[]{0, 1, 0, -1, 0}; 8         int[][] distance = new int[grid.length][grid[0].length]; 9         int[][] reach = new int[grid.length][grid[0].length];10         int numBuildings = 0;11         for (int i = 0; i < grid.length; i++) {12             for (int j = 0; j < grid[0].length; j++) {13                 if (grid[i][j] == 1) {14                     int level = 1;15                     numBuildings++;16                     boolean[][] visited = new boolean[grid.length][grid[0].length];17                     Queue
queue = new LinkedList<>();18 queue.offer(new int[]{i, j});19 while (!queue.isEmpty()) {20 int size = queue.size();21 for (int k = 0; k < size; k++) {22 int[] current = queue.poll();23 for (int l = 0; l < 4; l++) {24 int x = current[0] + shift[l];25 int y = current[1] + shift[l + 1];26 if (x >= 0 && x < grid.length && y >= 0 && y < grid[0].length && !visited[x][y] && grid[x][y] == 0) {27 visited[x][y] = true;28 distance[x][y] += level;29 reach[x][y]++;30 queue.offer(new int[]{x, y});31 }32 }33 }34 level++;35 }36 }37 }38 }39 40 int result = Integer.MAX_VALUE;41 for (int i = 0; i < grid.length; i++) {42 for (int j = 0; j < grid[0].length; j++) {43 if (grid[i][j] == 0 && reach[i][j] == numBuildings) {44 result = Math.min(result, distance[i][j]);45 }46 }47 }48 return result == Integer.MAX_VALUE ? -1 : result;49 }50 }

Basic idea:

1. starting from each element expanding to all map. Find a 0, add one to reach, and level traversal to.

2. Go through each element again. Find the smallest distances.

转载于:https://www.cnblogs.com/shuashuashua/p/5642236.html

你可能感兴趣的文章
[转] C/C++中printf和C++中cout的输出格式
查看>>
swift 如何实现点击view后显示灰色背景
查看>>
【Android】3.9 覆盖物功能
查看>>
MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
查看>>
搭建SolrCloud的详细步骤
查看>>
svn的安装与使用
查看>>
基于Linux下Iptables限制BT下载的研究
查看>>
Android对话框-中篇-之建立自己的对话框
查看>>
华为交换机VRP用户界面配置及Telnet登录实验
查看>>
作为一个程序员我最大的遗憾
查看>>
《SolidWorks 2012中文版从入门到精通》一6.5 综合实例——斜齿圆柱齿轮
查看>>
storm集群的监控
查看>>
RHCE 6.0学习笔记-2 RHEL 6 使用光盘配置本地YUM源
查看>>
Mongodb定期备份
查看>>
Confluence 6 数据库设置
查看>>
刨根问底-struts-怎么加载配置的相应的信息
查看>>
解决mysql数据库大小写敏感问题
查看>>
《.NET最佳实践》与Ext JS/Touch的团队开发
查看>>
jsp页面组成
查看>>
LCS记录
查看>>