最后一个过不了
干啥啥不行,写烂代码第一名
我就是记录一下,建议别看
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
char[][] map = new char[n][n];
boolean[][] vis = new boolean[n][n];
boolean[][] vis2 = new boolean[n][n];
for (int i = 0; i < n; i++) {
map[i] = scan.next().toCharArray();
}
int fieldCount = 0;
int resCount = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(vis[i][j] == false && map[i][j] == '#'){
dfs(map,i,j,vis);
fieldCount+=1;
}else{
vis[i][j] = true;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(vis2[i][j] == false && map[i][j] == '.'){
bfs(map,i,j,vis2);
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
vis[i][j] = false;
}
}
boolean [] flag = {false};
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(vis[i][j] == false && map[i][j] == '*'){
dfs2(map,i,j,vis,flag);
if(flag[0]){
flag[0] = false;
}else {
resCount+=1;
}
}else{
vis[i][j] = true;
}
}
}
System.out.println(resCount);
}
private static void bfs(char[][] map, int i, int j, boolean[][] vis2) {
if(map[i][j] == '#'|| map[i][j] == '*' || i<0 || i == map.length || j<0 || j == map[0].length){
return;
}
vis2[i][j] = true;
if(i+1 < map.length && map[i+1][j] == '#' && vis2[i+1][j] == false){
map[i+1][j] = '*';
}
if(j+1< map[0].length && map[i][j+1] == '#' && vis2[i][j+1] == false){
map[i][j+1] = '*';
}
if(i-1>=0 && map[i-1][j] == '#' && vis2[i-1][j] == false){
map[i-1][j] = '*';
}
if(j-1>=0 && map[i][j-1] == '#' && vis2[i][j-1] == false){
map[i][j-1] = '*';
}
}
private static void dfs(char[][] map, int i, int j, boolean [][] vis) {
if(map[i][j] == '.' || i<0 || i == map.length || j<0 || j == map[0].length){
return;
}
vis[i][j] = true;
if(map[i+1][j] == '#' && vis[i+1][j] == false){
dfs(map,i+1,j,vis);
}
if(map[i][j+1] == '#' && vis[i][j+1] == false){
dfs(map,i,j+1,vis);
}
if(map[i-1][j] == '#' && vis[i-1][j] == false){
dfs(map,i-1,j,vis);
}
if(map[i][j-1] == '#' && vis[i][j-1] == false){
dfs(map,i,j-1,vis);
}
}
private static void dfs2(char[][] map, int i, int j, boolean [][] vis,boolean [] flag) {
if(map[i][j] == '.' || i<0 || i == map.length || j<0 || j == map[0].length){
return;
}
vis[i][j] = true;
if(map[i][j] == '#' && flag[0] == false){
flag[0] = true;
}
if((map[i+1][j] == '*'|| map[i+1][j] == '#') && vis[i+1][j] == false){
dfs2(map,i+1,j,vis,flag);
}
if((map[i][j+1] == '*'|| map[i+1][j] == '#') && vis[i][j+1] == false){
dfs2(map,i,j+1,vis,flag);
}
if((map[i-1][j] == '*'|| map[i+1][j] == '#') && vis[i-1][j] == false){
dfs2(map,i-1,j,vis,flag);
}
if((map[i][j-1] == '*'|| map[i+1][j] == '#') && vis[i][j-1] == false){
dfs2(map,i,j-1,vis,flag);
}
}
}
优化一下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
char[][] map = new char[n][n];
boolean[][] vis = new boolean[n][n];
boolean[][] vis2 = new boolean[n][n];
for (int i = 0; i < n; i++) {
map[i] = scan.next().toCharArray();
}
int fieldCount = 0;
int resCount = 0;
boolean [] flag = {false,false,false,false};
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(vis[i][j] == false && map[i][j] == '#'){
fieldCount+=1;
dfs(map,i,j,vis,flag);
if(flag[0] && flag[1] && flag[2] && flag[3]){
resCount+=1;
flag[0] = false;
flag[1] = false;
flag[2] = false;
flag[3] = false;
}
}
}
}
System.out.println(fieldCount-resCount);
}
private static void bfs(char[][] map, int i, int j,boolean [] flag) {
if(map[i][j] == '.' || i<0 || i == map.length || j<0 || j == map[0].length){
return;
}
if(i+1 < map.length && map[i+1][j] == '#'){
flag[0] = true;
}
if(j+1< map[0].length && map[i][j+1] == '#'){
flag[1] = true;
}
if(i-1>=0 && map[i-1][j] == '#'){
flag[2] = true;
}
if(j-1>=0 && map[i][j-1] == '#'){
flag[3] = true;
}
}
private static void dfs(char[][] map, int i, int j, boolean [][] vis,boolean[] flag) {
if(map[i][j] == '.' || i<0 || i == map.length || j<0 || j == map[0].length){
return;
}
if(!flag[0] || !flag[1] || !flag[2] || !flag[3]){
flag[0] = false;
flag[1] = false;
flag[2] = false;
flag[3] = false;
}
vis[i][j] = true;
if(map[i+1][j] == '#' && vis[i+1][j] == false){
bfs(map,i,j,flag);
dfs(map,i+1,j,vis,flag);
}
if(map[i][j+1] == '#' && vis[i][j+1] == false){
bfs(map,i,j,flag);
dfs(map,i,j+1,vis,flag);
}
if(map[i-1][j] == '#' && vis[i-1][j] == false){
bfs(map,i,j,flag);
dfs(map,i-1,j,vis,flag);
}
if(map[i][j-1] == '#' && vis[i][j-1] == false){
bfs(map,i,j,flag);
dfs(map,i,j-1,vis, flag);
}
}
}