島嶼個數

題目
給定一個m行n列的二維地圖,初始化每個單元都是水,操作addLand把單元格(row,col)變成陸地。島嶼定義為一系列想連的被水單元包圍的陸地單元,橫向和縱向相鄰的陸地稱為相連(斜對角不算)。在一系列addLand的操作過程中,給出每次addLand的操作后的島嶼的個數。二維地圖的每條邊外側假定都是水。
樣列
輸入 (行,列,addLand操作次數,addLand每次操作的坐標)
3
3
4
0 0
0 1
1 2
2 1
輸出(每次addLand后島嶼的個數)
1 1 2 3

代碼

import java.util.Scanner;

public class Main1 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int n = scan.nextInt();
        int num = scan.nextInt();
        int[][] nums = new int[num][2];
        for(int i=0;i<num;i++){
            nums[i][0] =  scan.nextInt();
            nums[i][1] =  scan.nextInt(); 
                    
        }
        int[][] ceils = new int[m+2][n+2];
        for(int i=0;i<n+2;i++){
            // 初始化第一行
            ceils[0][i] = 0;
            // 初始化最后一行
            ceils[n+1][i] = 0;
        }
        for(int i=0;i<m+2;i++){
            // 初始化第一列
            ceils[i][0] = 0;
            // 初始化最后一列
            ceils[i][m+1] = 0;
        }
        int[] result = new int[num];
        for(int i=0;i<num;i++){
            if(nums[i][0]<0 || nums[i][0]>m || nums[i][1]<0 || nums[i][1]>n){
                continue;
            }
            int row = nums[i][0]+1;
            int col = nums[i][1]+1;
            ceils[row][col] = 1;
            if(ceils[row-1][col] == 0 && 
                    ceils[row+1][col] == 0 &&
                    ceils[row][col-1] == 0 && 
                    ceils[row][col+1] == 0){
                if(i==0){
                    result[i] = 1;
                    continue;
                } 
                result[i] = result[i-1]+1;
            } else {
                result[i] = result[i-1];
            }
        }
        
        for(int i=0;i<num;i++){
            if(i==0){
                System.out.print(result[i]);
                continue;
            } 
            System.out.print(" " + result[i]);
            
        }

    }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容