如下由'#'和'.'符號組成的圖案表示乙個迷宮,在這個迷宮中,'.'表示可以走的路徑,可以通過,而'#'表示迷宮的牆,是不能穿過的。我們的目的就是要從迷宮的起點走到終點,找出一條合適的路徑,當然最短路徑最好。
站在迷宮中的乙個位置上,環顧四周,總共有四個方向可以選擇,而這每乙個方向都有可能成功,同樣也有可能失敗。在成功的時候我們就需要順著這條路徑往下走,而失敗則需要返回上乙個可以選擇的位置。因此我們需要儲存之前走過路徑的狀態,很容易能夠想到遞迴的解法,使用系統的棧就可以很好的還原狀態。
故我們使用遞迴的解法,在每乙個位置上都進行上、下、左、右四個方向的探索,如果這個方向的路徑是有效的,則往下遞迴。無效則跳過,如果四個方向都沒有合適的路徑,我們就返回上一層(即上乙個位置)重新查詢。不斷嘗試,直到從達到終點為止。
#include #include using namespace std;
// 輸出迷宮陣列
void printmaze(char maze[12])
cout << "\n";
}// 檢測當前位置是否有效
bool vaild(char maze[12], int row, int col)
// 進行遞迴查詢
void findway(char maze[12], int row, int col) ;
static const int vertical[4] = ;
static const int finalcol = 11, finalrow = 4;
maze[row][col] = 'x'; // 標記當前位置
if (row == finalrow && col == finalcol)
else
}maze[row][col] = '.'; // 還原陣列狀態
}int main() ,,,
,,,,
,,,,
}; // 迷宮陣列
printmaze(maze); // 展示迷宮
findway(maze, 2, 0);
return 0;
}
走迷宮問題
1.這個是迷宮,1代表牆,0代表通路。1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0...
走迷宮問題
給一迷宮表個和入口位置,找出並列印出從入口到出口的路徑 注意 迷宮 我們可以用乙個二維陣列來表示,但是如果用二維陣列表示,將唯一固定,迷宮趣味性大大降低並 長度增大 因此,我們最好是將迷宮 儲存在一檔案中,在實現時再從檔案中讀取 採用模板來實現可實現復用性 1 我們可沿著入口逐一方向進行試探,若有通...
走迷宮問題
乙個10 10的迷宮,每乙個格仔裡面存0或者1,0代表可以走,1代表障礙。輸入值 起始座標 輸出值 能否達到設定的目標座標點 bool型變數,1或者0 1 include 2 include 3 4 define ex 2 5 define ey 2 6bool findpath false 7 i...