wordpress_百科seop
分析
思路
1.輸入讀取:讀取網(wǎng)格的維度(M,N)和像素值到一個二維數(shù)組中。
2.迭代:遍歷二維數(shù)組中的每個單元格。
3.邊界檢測:對于每個像素值為1的單元格,檢查其八個相鄰的單元格。如果任何相鄰單元格的像素值為5,則增加邊界計數(shù)。
4,邊界計數(shù)調(diào)整:由于每個邊界被計算兩次(分別與相鄰的兩個像素1相關(guān)聯(lián)),需要將計數(shù)調(diào)整為實際的邊界數(shù)量。
5,輸出結(jié)果:輸出最終的像素1代表的物體的邊界數(shù)量。
這個算法基于遍歷和相鄰像素的檢查,以計算像素1代表的物體的邊界數(shù)量。
?
示例1
輸入
6 6
1 1 1 1 1 1
1 5 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 5
輸出
2
示例2
輸入
6 6
1 1 1 1 1 1
1 5 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 5 1
1 1 1 1 1 1
輸出
1
代碼優(yōu)化:
import java.util.Scanner;public class 圖像物體邊界 {public static int row;public static int col;public static int[][] matrix;public static void main(String[] args) {Scanner in = new Scanner(System.in);row = in.nextInt();col = in.nextInt();matrix = new int[row][col];for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {matrix[i][j] = in.nextInt();}}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (matrix[i][j] == 5) {if (i > 0 && j > 0) matrix[i - 1][j - 1] = 0;if (i > 0) matrix[i - 1][j] = 0;if (i > 0 && j < col - 1) matrix[i - 1][j + 1] = 0;if (j > 0) matrix[i][j - 1] = 0;if (i > 0 && j < col - 1) matrix[i][j + 1] = 0;if (i < row - 1 && j > 0) matrix[i + 1][j - 1] = 0;if (i < row - 1 && j < col - 1) matrix[i + 1][j + 1] = 0;}}}int count = 0;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (matrix[i][j] == 0) {count++;matrix[i][j] = -1;countBorder(i, j);}}}System.out.println(count);}public static void countBorder(int i, int j) {if (i > 0 && matrix[i - 1][j] == 0) {matrix[i - 1][j] = -1;countBorder(i - 1, j);}if (i > 0 && j > 0 && matrix[i - 1][j - 1] == 0) {matrix[i - 1][j - 1] = -1;countBorder(i - 1, j - 1);}if (i > 0 && j < col - 1 && matrix[i - 1][j + 1] == 0) {matrix[i - 1][j + 1] = -1;countBorder(i - 1, j + 1);}if (j > 0 && matrix[i][j - 1] == 0) {matrix[i][j - 1] = -1;countBorder(i, j - 1);}if (j < col - 1 && matrix[i][j + 1] == 0) {matrix[i][j + 1] = -1;countBorder(i, j + 1);}if (i < row - 1 && matrix[i + 1][j] == 0) {matrix[i + 1][j] = -1;countBorder(i + 1, j);}if (i < row - 1 && j > 0 && matrix[i + 1][j - 1] == 0) {matrix[i + 1][j - 1] = -1;countBorder(i + 1, j - 1);}if (i < row - 1 && j < col - 1 && matrix[i + 1][j + 1] == 0) {matrix[i + 1][j + 1] = -1;countBorder(i + 1, j + 1);}}
}
277.【華為OD機試】圖像物體的邊界(深度優(yōu)先搜索 (DFS)—Java&Python&C++&JS實現(xiàn))_圖像物體的邊界華為od-CSDN博客