問題描述:ios
給定一個大小爲N*M的迷宮,每一步能夠走上下左右四個方向,假設必定能夠到到達終點,求達到終點的最小步數spa
輸入:code
S爲起點,G爲終點blog
思路:ci
使用深刻優先搜索的方法io
代碼:class
# include <iostream> # include <fstream> using namespace std; int N, M; char map[100][100]; int isUsed[100][100] = {0}; int DFS_Search(int i, int j) { isUsed[i][j] = 1; if ( map[i][j] == 'G' ) { return 0; } else { int MinDistance = 9999; if ( i - 1 >= 0 && map[i-1][j] != '#' && isUsed[i-1][j] == 0) { int dis = DFS_Search(i-1, j) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( i + 1 <= N - 1 && map[i+1][j] != '#' && isUsed[i+1][j] == 0) { int dis = DFS_Search(i+1, j) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( j - 1 >= 0 && map[i][j-1] != '#' && isUsed[i][j-1] == 0) { int dis = DFS_Search(i, j-1) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } if ( j + 1 <= M - 1 && map[i][j+1] != '#' && isUsed[i][j+1] == 0) { int dis = DFS_Search(i, j+1) + 1; MinDistance = dis < MinDistance ? dis : MinDistance; } return MinDistance; } } int main() { ifstream cin("MiGong_Data.txt"); cin>>N>>M; for ( int i = 0; i < N; i++) { for ( int j = 0; j < M; j++) { cin>>map[i][j]; } } int result = DFS_Search(0, 1); cout<<result<<endl; return 0; }