题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String[] NM = in.nextLine().split(" ");
int[] nm = new int[2];
nm[0] = Integer.parseInt(NM[0]);
nm[1] = Integer.parseInt(NM[1]);
int[][] MG = new int[nm[1]][nm[0]];
for (int m = 0;m<nm[0];m++){
String[] cc = in.nextLine().split(" ");
for (int n = 0;n<nm[1];n++){
MG[n][m] = Integer.parseInt(cc[n]);
}
}
List<int[]> GG = new ArrayList<>();
List<int[]> res = DG(0,0,MG,GG,0,0,nm[1],nm[0]);
System.out.println("(0,0)");
for (int i = res.size()-1;i>=0;i--){
System.out.println("("+res.get(i)[1]+","+res.get(i)[0]+")");
}
}
}
public static List<int[]> DG(int n,int m,int[][] MG,List<int[]> list,int ln,int lm,int nMax,int mMax){
int chang = list.size();
//下到
if (n+1==nMax-1&&m==mMax-1) {
list.add(new int[]{n+1,m});
return list;
}
//右到
if (n==nMax-1&&m+1==mMax-1){
list.add(new int[]{n,m+1});
return list;
}
//下未到
if (n+1<nMax&&n+1!=ln&&MG[n+1][m]==0){
list = DG(n+1,m,MG,list,n,m,nMax,mMax);
if (chang!=list.size()) {
list.add(new int[]{n+1,m});
return list;
}
}
//右未到
if (m+1<mMax&&m+1!=lm&&MG[n][m+1]==0){
list = DG(n,m+1,MG,list,n,m,nMax,mMax);
if (chang!=list.size()) {
list.add(new int[]{n,m+1});
return list;
}
}
//左
if (m-1>=0&&m-1!=lm&&MG[n][m-1]==0){
list = DG(n,m-1,MG,list,n,m,nMax,mMax);
if (chang!=list.size()) {
list.add(new int[]{n,m-1});
return list;
}
}
//右
if (n-1>=0&&n-1!=ln&&MG[n-1][m]==0){
list = DG(n-1,m,MG,list,n,m,nMax,mMax);
if (chang!=list.size()) {
list.add(new int[]{n-1,m});
return list;
}
}
return list;
}
}
查看7道真题和解析