百度笔试-房屋群

题目大意:为了进行城市规划,需要计算一个住宅区的住宅数目。该住宅区的俯视图已经做好,并规划成一个n×m的网格,如果某个网格单元具有屋顶的一部分,则向其赋值1,否则赋值0,由值为1的相邻单元组成的簇认定为一个单独住宅。对角放置的值为1的网格不被十位同一住宅区。
输入:n×m的二维数组,n表示行,m表示列
输出:整数k表示住宅的总数目

import java.util.LinkedList;
import java.util.Queue;


public class T6 {
    public static void main(String[] args)
    {

        int[][] map={{0,1,0,0},{0,1,0,0},{0,1,1,0},{1,0,0,1}};
        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;
            }   
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值