红黑瓷砖(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 ;
				}
			}
		}
	}
}
相关推荐
fish_xk几秒前
map和set
java·开发语言
李崧正15 分钟前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命17 分钟前
鳶尾花項目JAVA
java·开发语言·机器学习
二哈赛车手24 分钟前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
winner888127 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI人工智能+电脑小能手35 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
bzmK1DTbd44 分钟前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则
winner88811 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
直奔標竿1 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
qq_589568101 小时前
java基础学习,案例练习,即时通讯
java·开发语言·学习