題目
給定一個m行n列的二維地圖状知,初始化每個單元都是水采转,操作addLand把單元格(row耙箍,col)變成陸地撰糠。島嶼定義為一系列想連的被水單元包圍的陸地單元,橫向和縱向相鄰的陸地稱為相連(斜對角不算)辩昆。在一系列addLand的操作過程中阅酪,給出每次addLand的操作后的島嶼的個數(shù)。二維地圖的每條邊外側(cè)假定都是水汁针。
樣列
輸入 (行术辐,列,addLand操作次數(shù)施无,addLand每次操作的坐標(biāo))
3
3
4
0 0
0 1
1 2
2 1
輸出(每次addLand后島嶼的個數(shù))
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]);
}
}
}