leet-code/src/main/java/com/code/leet/contest/conterst5/Solution4.java
huangge1199@hotmail.com 4a59c75507 训练营5
2021-08-08 22:18:43 +08:00

60 lines
1.9 KiB
Java

package com.code.leet.contest.conterst5;
import javafx.util.Pair;
import java.util.LinkedList;
import java.util.Queue;
public class Solution4 {
public static void main(String[] args) {
Solution4 solution = new Solution4();
}
public int getDistance(String[] maze) {
int[] xIndex = new int[]{-1, 1, 0, 0};
int[] yIndex = new int[]{0, 0, -1, 1};
char[][] chs = new char[maze.length][maze[0].length()];
for (int i = 0; i < maze.length; i++) {
chs[i] = maze[i].toCharArray();
}
boolean[][] use = new boolean[maze.length][maze[0].length()];
Pair<Integer, Integer> start = null;
for (int i = 0; i < chs.length; i++) {
for (int j = 0; j < chs[0].length; j++) {
if (chs[i][j] == 'X') {
use[i][j] = true;
}
if (chs[i][j] == 'S') {
use[i][j] = true;
start = new Pair<>(i, j);
}
}
}
Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
queue.add(start);
int count = 0;
while (!queue.isEmpty()) {
int size = queue.size();
count++;
for (int i = 0; i < size; i++) {
Pair<Integer, Integer> pair = queue.poll();
for (int j = 0; j < 4; j++) {
int x = pair.getKey() + xIndex[j];
int y = pair.getValue() + yIndex[j];
if (x < 0 || x >= chs.length || y < 0 || y >= chs[0].length || use[x][y]) {
continue;
}
if (chs[x][y] == '.') {
queue.add(new Pair<>(x, y));
use[x][y] = true;
}
if(chs[x][y]=='E'){
return count;
}
}
}
}
return -1;
}
}