#include<bits/stdc++.h>
using namespace std;
int n;
char maps[30][30] = {};
bool book[30][30] = {};
int cnt = 0;
void dfs(int stx, int sty)
{
if(stx < 1 || stx > n || sty < 1 || sty > n)
{
cnt++;
return;
}
if(!book[stx][sty] && maps[stx][sty] == 'U')
{
book[stx][sty] = true;
dfs(stx - 1, sty);
book[stx][sty] = false;
}
if(!book[stx][sty] && maps[stx][sty] == 'D')
{
book[stx][sty] = true;
dfs(stx + 1, sty);
book[stx][sty] = false;
}
if(!book[stx][sty] && maps[stx][sty] == 'L')
{
book[stx][sty] = true;
dfs(stx, sty - 1);
book[stx][sty] = false;
}
if(!book[stx][sty] && maps[stx][sty] == 'R')
{
book[stx][sty] = true;
dfs(stx, sty + 1);
book[stx][sty] = false;
}
}
int main()
{
char ch;
cin >> n;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
cin >> maps[i][j];
}
getchar();
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
dfs(i, j);
memset(book, 0, sizeof(book));
}
}
cout << cnt << endl;
return 0;
}
学风杯 7-11 没错,是一道迷宫题 (300 分)
最新推荐文章于 2022-09-12 12:31:15 发布
这段代码实现了一个二维网格中,使用深度优先搜索(DFS)来计算从任意起点出发,遇到字符'U'(上)、'D'(下)、'L'(左)、'R'(右)时改变方向,不重复经过同一位置的路径数量。输入为网格大小n及网格内容,输出为路径总数。
3490

被折叠的 条评论
为什么被折叠?



