已知地图如下所示,小明家在坐标原点(0,0),学校坐标(x,y),已知某2个点(可能为家或学校)在修路,因而不能通过这两点,小明走路只能向上和向右走,求出从家到达学校共有几种走法。下图中,修路的两点以黑点标识。
输入格式:
首先输入测试组数T,然后输入T组测试;对于每组测试,输入学校坐标(x,y),两个修路点坐标(x1, y1),(x2, y2)。其中,0<=x, y, x1, y1, x2, y2<=30。
输出格式:
对于每组测试,输出从家(0,0)到达学校(x,y)共有几种走法。
输入样例:
3
2 2 1 1 2 1
4 5 0 0 2 2
5 6 2 3 0 0
输出样例:
1
0
0
解决代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
int[] arr = new int[6];
for (int i=0; i<k; i++) {
for (int j=0; j<6; j++) {
arr[j] = sc.nextInt();
}
if ((arr[2] == arr[0] && arr[3] == arr[1]) || (arr[4] == arr[0] && arr[5] == arr[1])) {
long ooo = 0;
System.out.println(ooo);
}
else if (arr[0] == 0 && arr[1] == 0){
long ooo = 1;
System.out.print(ooo);
}
else {
long[][] dp = new long[arr[0]+1][arr[1]+1];
for (int m=0; m<=arr[0]; m++) {
for (int n=0; n<=arr[1]; n++){
if ((m == arr[2] && n == arr[3]) || (m == arr[4] && n == arr[5])) {
dp[m][n] = 0;
}
else if (m>0 && n>0){
dp[m][n] = dp[m-1][n] + dp[m][n-1];
}
else if (m>0) {
dp[m][n] = dp[m-1][n];
}
else if (n>0) {
dp[m][n] = dp[m][n-1];
}
else {
dp[m][n] = 1;
}
}
}
System.out.println(dp[arr[0]][arr[1]]);
}
}
}
}