あなたの質問はあまり明確ではありません.私は、可能な方向が1ステップ正しいと仮定します(例: (1,1) -> (1,2) )、1ステップ下(例:(1,1,) -> (2, 1)) または右と下の両方 (例: (1,1) -> (2,2))。そうしないと、amit が説明したように、無限の数のパスが存在する可能性があります。
あなたの質問の場合、3つの可能なパスがあるはずです。nav_jan が述べたように、(0,0)->(1,1)->(2,2)->(3,3) も可能なパスです。
私は再帰的な方法を設計しました。それは非常に理解しやすいです。(0,0) 点から開始し、3 方向に移動してみます。現在のポイントが 1 の場合、移動を続けます。それ以外の場合は戻ります。(n-1,n-1) ポイントに到達すると、有効なパスが見つかります。
コードは Java で書かれています。
public static List<String> getMatrixPaths(int[][] matrix){
List<String> pathList = new ArrayList<String>();
if(matrix != null && matrix.length > 0){
getMatrixPaths(matrix, 0,0, "", pathList);
}
return pathList;
}
public static void getMatrixPaths(int[][] matrix, int i, int j, String path, List<String> pathList){
int n = matrix.length - 1;
if(i > n || j > n){
return;
}else if( matrix[i][j] == 1){//only 1 is valid
path += String.format(" (%d,%d)", i , j);
if( i ==n && j == n){ // reach (n,n) point
pathList.add(path);
}else {
getMatrixPaths(matrix, i +1, j , path, pathList);
getMatrixPaths(matrix, i , j +1, path, pathList);
getMatrixPaths(matrix, i + 1 , j +1, path, pathList);
}
}
}
問題の行列をテストに使用します。私の結果は [ (0,0) (1,0) (1,1) (2,2) (3,3), (0,0) (0,1) (1) です。 ,1) (2,2) (3,3), (0,0) (1,1) (2,2) (3,3)] .
この質問を参照できます: Algorithm for Find all paths in a NxN grid . とても似ていると思います。