0
그래서 미로에서 최소 경로의 길이를 찾는 코드를 작성해야합니다.미로에서 최소 경로 찾기
미로는 NxN 행렬이며 시작점은 (0,0)이고 끝점은 (N, N)입니다. 셀에 1이 들어 있으면 0을 통과 할 수 있습니다. 미로에는 해결책이있을 수도 있고 없을 수도 있습니다.
이 내 코드는이 솔루션이 가정, 지금까지입니다 :
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, 나는 단지 내가 최소 기능에 보내는 마지막 인자를 계산 가정하지만 그것을 고치는 법을 모른다?
오프 엣지 조건을 테스트하기 전에'if (maze [row] [col] == 0)'*을 사용합니다. 단, 같은 값을 반환하더라도 사용하기 전에 항상 한계를 확인하십시오. –
컴파일러 경고에주의를 기울이십시오 :'maze [row] [col] == 0; // 확인하십시오. '는 아무 것도하지 않습니다. –
visted 공간을 벽으로 표시하는 것이 좋습니다.하지만 함수를 반복적으로 호출 한 후에는 ('min' 내에서) 다시 바닥에 다시 놓아야 다른 솔루션에서도 탐색 할 수 있습니다. –