2

これは宿題で行き詰まった質問です。どなたか教えていただければ幸いです。

有効なパスは、最初のセル (行 0、列 0) から開始することによって定義され、最後のセル (行 n 列 n )。

例: セル [2][3] に数字 15 がある場合、次の移動は次のようになります: 行に +1、列に +5 から [3][8] または行に +5、行に +1 [7][4] までの列

このメソッドは、有効なパスがいくつあるかを返す必要があります。

この問題に対してバックトレース再帰メソッドを使用しようとしていますが、ループやその他のメソッドは使用できませんが、メソッドをオーバーロードしています。

これが私がこれまでに思いついたコードです:

public static int countPaths (int[][] mat)
{
    return countPaths(mat,0,0);
}

private static int countPaths(int[][] mat, int col, int row)
{


    if ((col==mat.length-1 && row==mat[0].length-1 )  {
        return 1;
    }    
    return countPaths(mat,mat[col][row]/10+col,mat[col][row]%10+row) + countPaths(mat,mat[col][row]%10-col,mat[col][row]/10-row);

} 

助けてくれてありがとう!

4

5 に答える 5

0
    return countPaths(mat,mat[col][row]/10+col,mat[col][row]%10+row) + countPaths(mat,mat[col][row]%10-col,mat[col][row]/10-row);

「正当なパスは、最初のセル (行 0 列 0) から開始することによって定義され、最後のセル (行 n 列n)。

例: セル [2][3] に数字 15 がある場合、次の移動は次のようになります: 行に +1、列に +5 から [3][8] または行に +5、行に +1 [7][4] の列"

行と列を決定する際の論理がある程度ずれているように思えます。関係なく、同じ2桁を取得する必要があります。それらを切り替えるだけです。コードを読みやすくするために、数字の値を変数内に格納することをお勧めします。問題の解き方はわかりますが、私が解いてもあなたは何も学べません。

また、別のユーザーが指摘したように、「行き止まり」のパスがまだ有効かどうかを確認して、パスを閉じるようにしてください。その時点で、0 を返します。

于 2013-05-24T16:49:18.777 に答える