百度笔试-房屋群
2016-09-20 19:33
399 查看
为了进行城市规划,需要计算一个住宅区的住宅数目。该住宅区的俯视图已经做好,并规划成一个n×m的网格,如果某个网格单元具有屋顶的一部分,则向其赋值1,否则赋值0,由值为1的相邻单元组成的簇认定为一个单独住宅。对角放置的值为1的网格不被视为同一住宅区。
输入:n×m的二维数组,n表示行,m表示列
输出:整数k表示住宅的总数目
输入:n×m的二维数组,n表示行,m表示列
输出:整数k表示住宅的总数目
import java.util.Queue; public class 百度笔试_房屋群 { public static void main(String[] args) { int[][] map={{0,0,0,0,0},{0,1,1,0,0},{0,0,0,0,0},{0,0,1,1,0},{0,0,1,0,0}}; System.out.println(solve(map)); } static int solve(int[][] grid) { int cnt=0; int row=grid.length; int col=grid[0].length; used=new int[row][col]; for(int i=0;i<row;i++) { for(int j=0;j<col;j++) { if(grid[i][j]==1 && used[i][j]==0) { bfs(grid,i,j,row,col); cnt++; } } } return cnt; } static class Node{ int x;int y; public Node(int x,int y) { this.x=x; this.y=y; } } static int[][] used; static int[][] d={{1,0},{-1,0},{0,1},{0,-1}}; static void bfs(int[][] map,int x,int y,int n,int m) { Queue<Node> q=new LinkedList<>(); Node first=new Node(x, y); q.add(first); used[x][y]=1; while(!q.isEmpty()) { Node head=q.poll(); int xx=head.x; int yy=head.y; for(int i=0;i<4;i++) { int px=xx+d[i][0]; int py=yy+d[i][1]; if(px<0 || px>=n || py<0 || py>=m || used[px][py]==1 || map[px][py]==0) continue; q.add(new Node(px, py)); used[px][py]=1; } } } }
相关文章推荐
- Docker-搭建简单的应用栈
- 无限轮播加小圆点
- 【经典算法探究】:B树,B+树,B-树,B*树
- LeetCode 172. Factorial Trailing Zeroes题解
- http协议没有已注册的程序
- PHP学习笔记:用mysqli连接数据库
- yii2自定义500错误
- 模板方法模式
- 字节流转化为字符流输出
- POJ 3041 POJ 3041
- XCTF2016 类似培根
- ibatis和hibernate的区别
- Ibatis的级联实现
- cocos2dx游戏性能优化之对象池
- 浅谈Activity的四种启动模式
- 21 RadioGroup ListFragment
- Android相机相册的调用,图片的存储删除
- STL容器 -- Vector
- 21 RadioGroup ListFragment
- ibatis中的缓存策略