题目描述:
蒜头君是一个玩迷宫的高手,天下还没有能难住他的迷宫。但是总有人喜欢刁难蒜头君,不停的给蒜头君出难题。这个出题的人很聪明,他知道天下还没有能难住蒜头君的迷宫。
所以他便转换思维问蒜头君,在不走重复路径的情况下,总共有多少不同可以到达终点的路径呢?蒜头君稍加思索便给出了答案,你要不要也来挑战一下?
输入格式
第一行输入两个整数 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版权协议,转载请附上原文出处链接和本声明。