题解 | 挡住洪水
挡住洪水
https://www.nowcoder.com/practice/56e54f4c2e3c4a58abfe76dbc1da1d7e
Java
DFS深度优先遍历
将四周的‘0’深度遍历为‘*’,最后统计所有的‘0’即可
import java.util.Scanner;
public class Main {
//dfs写成了bfs,没有太大影响
public static void bfs(char[][] ch,int i,int j){
if(ch[i][j]=='*'){
return ;
}
ch[i][j]='*';
int x=ch.length;
int y=ch[0].length;
if(i-1>=0){
bfs(ch,i-1,j);
}
if(i+1<x){
bfs(ch,i+1,j);
}
if(j-1>=0){
bfs(ch,i,j-1);
}
if(j+1<y){
bfs(ch,i,j+1);
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x=in.nextInt();
int y=in.nextInt();
char[][] ch=new char[x][y];
for(int i=0;i<x;i++){
ch[i]=in.next().toCharArray();
}
for(int i=0;i<x;i++){
if(ch[i][0]=='0'){
bfs(ch,i,0);
}
if(ch[i][y-1]=='0'){
bfs(ch,i,y-1);
}
}
for(int j=0;j<y;j++){
if(ch[0][j]=='0'){
bfs(ch,0,j);
}
if(ch[x-1][j]=='0'){
bfs(ch,x-1,j);
}
}
int count=0;
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
if(ch[i][j]=='0'){
count++;
}
}
}
System.out.println(count);
}
}
查看29道真题和解析

小天才公司福利 1165人发布