迷宮的最短路徑

問題描述: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;
}
相關文章
相關標籤/搜索