2016-12-10 4 views
0

だから、迷路内の最小経路の長さを見つけるコードを作る必要があります。Cの迷路で最小限の経路を見つける

迷路はNxN行列で、開始点は(0,0)、終了点は(N、N)です。セルには1が含まれています。迷路には解決策がある場合とない場合があります。

これは私のコードは、それが解決策があると仮定すると、これまでのところです:

int path_finder(int maze[][N], int n, int row, int col) // n equal N 
{ 
int i, j, pth; 

if (row == n-1 && col == n-1) // Return 0 if I get to goal 
    return 0; 

if (col < 0 || row < 0 || row > n-1 || col > n-1) // Same 
    return n*n; 

if (maze[row][col] == 0) // Return big number to make sure it doesn't count 
    return n*n; 

maze[row][col] = 0; 

pth = min(1+path_finder(maze,n, row+1, col), // Assume I already know the path 
      1+path_finder(maze,n, row-1, col), // from the next starting point 
      1+path_finder(maze,n, row, col+1), // just add 1 to it 
      1+path_finder(maze,n, row, col-1) ); 

maze[row][col] = 1; 

return pth; 
} 

を私は常に取得N^2 + 1、私は、それだけで私はmin関数に送る最後の引数を数えると仮定けどそれを修正する方法を知らない?

+2

オフエア条件をテストする前に 'if(maze [row] [col] == 0)' *を使用しています。 –

+1

コンパイラの警告に注意してください: 'maze [row] [col] == 0; //確かめてください... '何もしません。 –

+0

vistedスペースを壁としてマークすることは良い考えですが、関数を再帰的に呼び出すと(あなたの 'min'の中で)、他のソリューションがそれを探索できるように床に再度リセットする必要があります。 –

答えて

関連する問題