提交代码:
class Solution {
public void solve(char[][] board) {
int m = board.length,lines = 0;
if(m != 0){
lines = board[0].length;
}
for (int x = 0; x < m; x++) {
dfs(board,x,0);
dfs(board,x,lines-1);
}
for (int y = 0; y <lines; y++){
dfs(board,0,y);
dfs(board,m-1,y);
}
for (int i=0;i < m; i++){
for (int j =0; j<lines;j++){
if (board[i][j]=='A'){
board[i][j] = 'O';
}else{
board[i][j] ='X';
}
}
}
}
public static void dfs(char[][] a, int x, int y) {
if (x < 0 || x >= a.length || y >= a[0].length|| y < 0 || a[x][y] != 'O') {
return;
}
a[x][y] = 'A';
dfs(a, x + 1, y);
dfs(a,x-1,y);
dfs(a,x,y+1);
dfs(a,x,y-1);
}
}
编译器运行代码:
package LiKou;
import java.util.Scanner;
public class a130围绕的区域 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] str = new String[1000];
char[][] board = new char[1000][1000];
int m = 0, lines = 0;
while (!(str[m] = input.nextLine()).equals("")) {
board[m] = str[m].toCharArray();
m++;
}
lines = str[0].length();
for (int i = 0; i < m; i++) {
dfs(board,i,0);
dfs(board,i,lines-1);
}
for (int i = 0; i <lines; i++){
dfs(board,0,i);
dfs(board,m-1,i);
}
for (int i=0;i < m; i++){
for (int j =0; j<lines;j++){
if (board[i][j]=='A'){
board[i][j] = 'O';
}else{
board[i][j] ='X';
}
System.out.print(board[i][j]);
}
System.out.println();
}
}
public static void dfs(char[][] a, int x, int y) {
if (x < 0 ||x >=a.length||y>=a[0].length|| y < 0 || a[x][y] != 'O') {
return;
}
a[x][y] = 'A';
dfs(a, x + 1, y);
dfs(a,x-1,y);
dfs(a,x,y+1);
dfs(a,x,y-1);
}
}