红黑瓷砖(BFS和DFS)

9 6
....#.
.....#
......
......
......
......
......
#@...#
.#..#.

45

BFS

java 复制代码
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
	//. 黑色
	//# 红色
	//@ 黑色开始
	static final int N = 11;
	static int n,m,ans = 1;	
	static char[][] g = new char[N][N];
	static boolean[][] vis = new boolean[N][N];
	
	public static void bfs(int[] start) {
		Deque<int[]> dq = new LinkedList<>();
		dq.addLast(start);
		vis[start[0]][start[1]] = true;//@记录一次 ans初始值为1

		int[] dx = new int[] {1,-1,0,0};
		int[] dy = new int[] {0,0,1,-1};
		
		while(!dq.isEmpty()) {
			int[] t = dq.pollFirst();
			for(int i=0;i<4;i++) {
				int x = t[0]+dx[i];
				int y = t[1]+dy[i];
				if(x<0||x>n-1||y<0||y>m-1)
					continue;
				if(g[x][y] == '#')
					continue;
				if(vis[x][y])//如果访问过则continue
					continue;
				else {//没有访问过要标记为访问过之后 ans++ 然后入队列
					vis[x][y] = true;
					ans++;
					dq.addLast(new int[] {x,y});					
				}
			}
		}
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		sc.nextLine();
		
		g = new char[n][m];
		for(int i=0;i<n;i++)
			g[i] = sc.nextLine().toCharArray();
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(g[i][j] == '@') {
					bfs(new int[] {i,j});
					System.out.println(ans);
					return ;
				}
			}
		}
	}
}

DFS

java 复制代码
import java.util.Scanner;
public class Main {
	//. 黑色
	//# 红色
	//@ 黑色开始
	static final int N = 11;
	static int n,m,ans = 1;	
	static char[][] g = new char[N][N];
	static boolean[][] vis = new boolean[N][N];
	static int[] dx = new int[] {1,-1,0,0};
	static int[] dy = new int[] {0,0,1,-1};
	
	public static void dfs(int x1,int y1) {	
			for(int i=0;i<4;i++) {
				int x2 = x1+dx[i];
				int y2 = y1+dy[i];
				if(x2<0||x2>n-1||y2<0||y2>m-1)
					continue;
				if(g[x2][y2] == '#')
					continue;
				if(vis[x2][y2])
					continue;
				else {
					vis[x2][y2] = true;
					ans++;
					dfs(x2,y2);
				}
			}
		}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		sc.nextLine();
		
		g = new char[n][m];
		for(int i=0;i<n;i++)
			g[i] = sc.nextLine().toCharArray();
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(g[i][j] == '@') {
					vis[i][j] = true;//@标记一次 ans初始为1
					dfs(i,j);
					System.out.println(ans);
					return ;
				}
			}
		}
	}
}
相关推荐
木子欢儿3 分钟前
在 Debian 12 上安装 Java 21
java·运维·开发语言·debian
一二小选手6 分钟前
【高级编程】XML DOM4J解析XML文件(含案例)
xml·java
终末圆7 分钟前
MyBatis XML映射文件编写【后端 18】
xml·java·开发语言·后端·算法·spring·mybatis
就这个java爽!8 分钟前
超详细的XML介绍【附带dom4j操作XML】
xml·java·开发语言·数据库·青少年编程·eclipse
kunkun10110 分钟前
Mybatis的XML实现方法
xml·java·mybatis
libai16 分钟前
STM32 USB HOST CDC 驱动CH340
java·前端·stm32
IT学长编程16 分钟前
计算机毕业设计 数字化农家乐管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·农家乐管理平台
Q1860000000017 分钟前
用java语言写一个表的查询操作
java·开发语言·oracle
2401_8576009518 分钟前
心理教育辅导系统的设计与Spring Boot实现
java·spring boot·后端
GGBondlctrl19 分钟前
【后端开发】JavaEE初阶—线程的理解和编程实现
java·java-ee·线程的创建方式·线程是什么·线程的内部原理