左上から右下にパスの総数を得ることができるプログラムを作りたいと思います。途中でいくつかの障害があります。障害物と私の分析グリッドのパスを計算
は、例えば、私は、グリッド迷路以下のようにしている場合:それは@から9つのパスが$にある私に教えてください
@ + + + +
+ + + X X
+ X + + +
+ + + X +
+ X + + X
+ + + + $
(唯一の右または下に移動することができます)。 。したがって、私は最初の障害物なしでグリッドのための小さなプログラムを作った、ここでのコードは次のとおりです。
import java.util.*;
import java.math.*;
public class s15 {
private static long nChooseK(int k, int n) {
BigInteger numerator = p(k,n);
BigInteger denominator = p2(k);
return numerator.divide(denominator).longValue();
}
private static BigInteger p2(int k) {
BigInteger r = BigInteger.valueOf(1);
while (k != 0) {
BigInteger k1 = BigInteger.valueOf(k);
r = r.multiply(k1);
k--;
}
return r;
}
private static BigInteger p(int k, int n) {
int p;
int s = 1;
BigInteger r = BigInteger.valueOf(s);
for (int i = 0; i <= k-1; i++) {
p = n - i;
BigInteger p1 = BigInteger.valueOf(p);
r = r.multiply(p1);
}
return r;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
System.out.println(nChooseK(x, x+y));
}
}
、私は最初の5*6
迷路は、障害物がなければ、持っているどのように多くのパスを取得するには、このコードを使用してみてください。それから私は462を得るが、私は障害物を考慮しなければならないので、それぞれの障害物から$への道を引いて、21 70 6 15 10 3
、驚くべきことに私が462-21-70-6-15-10-3
を使用した後、私は9よりもはるかに大きい数を得る私はブロックされていないマイナス合計パス障害に障害なしで合計パスを使用して、それは障害物を持つ合計パスでなければなりません。何が悪かったのか?どうも!
パスの総数は実際には126です(ヘルプがあれば)。それは(x + y)Cxではなく、(x + y-2)C(x-1)です。 6行5列をナビゲートするには、5つの下向きのステップと4つの右のステップが必要です。 –
無関係 - 一文字の識別子はあなたのコードを理解しづらいものにします。例えば、 'p'と呼ばれるメソッドはどうですか? –
@DavidWallace .:パスに障害物があります... – coderredoc