luogu P1605 迷宫
这题是一道迷宫题,因为不是求最优解,所以不能用
b
f
s
bfs
bfs,只能用
d
f
s
dfs
dfs
迷宫
d
f
s
dfs
dfs的框架:
int vis[1005][1005];
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
// cnt++; // 求方案数
return;
}
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (1 <= nx && nx <= n && 1 <= ny && ny <= m && !vis[nx][ny])
{
vis[nx][ny] = 1;
dfs(nx, ny);
vis[nx][ny] = 0;
}
}
}
70 70 70分code:
#include <iostream>
using namespace std;
int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
int vis[10][10];
int n, m, t, sx, sy, fx, fy, tx, ty, cnt = 0;
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
cnt++;
return;
}
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (1 <= nx && nx <= n && 1 <= ny && ny <= m && !vis[nx][ny])
{
vis[nx][ny] = 1;
dfs(nx, ny);
vis[nx][ny] = 0;
}
}
}
int main()
{
cin >> n >> m >> t >> sx >> sy >> fx >> fy;
for (int i = 0; i < t; i++)
{
cin >> tx >> ty;
vis[tx][ty] = 1;
}
dfs(sx, sy);
cout << cnt << "\n";
return 0;
}
因为一开始的点没有标记,所以只有 70 70 70分
A C AC ACcode:
#include <iostream>
using namespace std;
int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
int vis[10][10];
int n, m, t, sx, sy, fx, fy, tx, ty, cnt = 0;
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
cnt++;
return;
}
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i]; // nx 是 newx
int ny = y + dy[i]; // ny 是 newy
if (1 <= nx && nx <= n && 1 <= ny && ny <= m && !vis[nx][ny])
{
vis[nx][ny] = 1;
dfs(nx, ny);
vis[nx][ny] = 0;
}
}
}
int main()
{
cin >> n >> m >> t >> sx >> sy >> fx >> fy;
for (int i = 0; i < t; i++)
{
cin >> tx >> ty;
vis[tx][ty] = 1;
}
vis[sx][sy] = 1;
dfs(sx, sy);
cout << cnt << "\n";
return 0;
}