题目链接:迷宫
java代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static int N,M,T,SX,SY,FX,FY,count = 0;
public static void f(int x,int y,int a[][]) {
// 到达终点,路线数+1
if(x==FX&&y==FY) count++;
// 没有到达终点,且该坐标不是障碍坐标,也不是当前路线走过的坐标
else if(a[x][y]==1){
// 标记为走过的坐标
a[x][y] = 0;
// 分别向上下左右移动
if(y>1) f(x,y-1,a);
if(y<M) f(x,y+1,a);
if(x>1) f(x-1,y,a);
if(x<N) f(x+1,y,a);
// 在进行回溯前,将坐标标记为可走类型
a[x][y] = 1;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
N = in.nextInt();
M= in.nextInt();
T = in.nextInt();
SX = in.nextInt();
SY = in.nextInt();
FX = in.nextInt();
FY = in.nextInt();
int a[][] = new int[N+1][M+1];
// 其中,1表示可走,0表示在当前路线中走过了,-1表示有障碍
for(int i=0;i<N+1;++i) Arrays.fill(a[i], 1);
for(int i=0;i<T;++i)
a[in.nextInt()][in.nextInt()] = -1;
// 题目中说保证起点不会有障碍,但没说终点不会有障碍。。。
if(a[FX][FY]==-1) System.out.println(0);
else {
f(SX,SY,a);
System.out.println(count);
}
}
}