简单的搜索——DFS(6)
题目来源:洛谷 P1605 迷宫
共十个测试点
题解
AC代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10;
// 地图数组和标记数组
// mp[x][y] == 0 时,表示不可通行
int mp[maxn][maxn], vis[maxn][maxn];
int ans = 0;
// 起点坐标和终点坐标
int sx, sy, ex, ey;
int n, m;
// 方向数组
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
// 初始化输入和数组
void init()
{
memset(mp, 0, sizeof(mp));
memset(vis, 0, sizeof(vis));
int t;
scanf("%d%d%d", &n, &m, &t);
scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
vis[sx][sy] = 1;
// mp[x][y] == 1 时,表示可通行
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
mp[i][j] = 1;
while (t--)
{
int i, j;
scanf("%d%d", &i, &j);
mp[i][j] = 0;
}
}
// 深度优先搜索(DFS)
void dfs(int x, int y)
{
// 如果到达终点,回溯
if (x == ex && y == ey)
{
++ans;
return;
}
for (int i = 0; i < 4; ++i)
{
// 四个方向遍历
int tx = x + dx[i], ty = y + dy[i];
if (vis[tx][ty] == 0 && mp[tx][ty] == 1)
{
vis[tx][ty] = 1;
dfs(tx, ty);
vis[tx][ty] = 0;
}
}
}
int main()
{
init();
dfs(sx, sy);
printf("%d", ans);
return 0;
}