第一次写博客,题目是走迷宫,很水的题目,DFS的模板,但是渣渣的我还是看了看大牛们的代码才会,╮(╯▽╰)╭
DFS就是简单的递归,通俗点就是不停地调用自身,直至不符合条件。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct node
{
int x, y;
} p[1000];
int mp[100][100], mark[100][100];
int tx[] = { 0, 0, 1, -1 };
int ty[] = { 1, -1, 0, 0 };
int sum = 0;
int n,m;
void dfs(int x, int y)
{
node t, f;
t.x = x;
t.y = y;
mark[t.x][t.y]=1;
for (int i = 0; i < 4; i++)
{
f.x = tx[i] + t.x;
f.y = ty[i] + t.y;
if (f.x == n&&f.y == m)
{
sum++;
}
else if (f.x >= 1 && f.x <= n&&f.y >= 1 && f.y <= m&&mp[f.x][f.y] == -1 && mark[f.x][f.y] == 0)
{
mark[f.x][f.y] = 1;
dfs(f.x, f.y);
}
}
mark[t.x][t.y] = 0;
}
int main()
{
int y;
cin >> y;
while (y--)
{
cin >> n >> m;
memset(mark, 0, sizeof(mark));
memset(mp, 0, sizeof(mp));
for (int i = 1; i <=n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> mp[i][j];
if (mp[i][j] == 0)
mp[i][j] = -1;
}
}
sum = 0;
dfs(1, 1);
cout << sum << endl;
}
return 0;
}