深度优先搜索之迷宫解的方案数

题目描述:
蒜头君是一个玩迷宫的高手,天下还没有能难住他的迷宫。但是总有人喜欢刁难蒜头君,不停的给蒜头君出难题。这个出题的人很聪明,他知道天下还没有能难住蒜头君的迷宫。

所以他便转换思维问蒜头君,在不走重复路径的情况下,总共有多少不同可以到达终点的路径呢?蒜头君稍加思索便给出了答案,你要不要也来挑战一下?

输入格式
第一行输入两个整数 n(1 \le n \le 11),n(1≤n≤11), m(1 \le m \le 11)m(1≤m≤11),表示迷宫的行和列。

然后有一个 n \times mn×m 的地图,地图由’.’、’#’、‘s’、‘e’这四个部分组成。’.‘表示可以通行的路,’#'表示迷宫的墙,'s’表示起始点,'e’表示终点。

输出格式
输出一个整数,表示从’s’到达’e’的所有方案数。

样例输入 复制
5 5
s####
.####
.####
.####
…e
样例输出 复制
1
代码实现:

#include<iostream>
#include<string>
using namespace std;
int n,m,c=0;
string map[12];
bool vis[12][12];
void dfs(int x,int y)
{
    if(x>=n||x<0||y>=m||y<0||vis[x][y]||map[x][y]=='#')
        return;
    if(map[x][y]=='e')
    {
        c++;
        return;
    }
    vis[x][y]=true;
    dfs(x+1,y);
    dfs(x-1,y);
    dfs(x,y+1);
    dfs(x,y-1);
    vis[x][y]=false;
    return;
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>map[i];
    }
    int x,y;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
			if(map[i][j]=='s'&&!vis[i][j])
            {
                x=i;
                y=j;
            }
        }
    }
    dfs(x,y);
    cout<<c<<endl;
}

版权声明:本文为qq_35058075原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。