洛谷P1560 蜗牛的旅行
搜索,注意判断特殊情况,并且区分开什么时候转弯什么时候停止。然后转弯的时候更是要注意是否会进入障碍。
#include <bits/stdc++.h>
using namespace std;
int n, b, maxn;
int m[1011][1011], vis[1001][1001];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};//0,1,2,3分别表示上右下左。
void dfs(int x, int y, int now, int i)
{
int nx, ny;
if (vis[y][x])
{
maxn = max(maxn, now - 1);
return;
}
nx = x + dx[i];
ny = y + dy[i];
vis[y][x] = 1;
if (m[ny][nx])
{
for (int j = 0; j <= 3; j++)
{
int wx = x + dx[j];
int wy = y + dy[j];
if (!m[wy][wx])
dfs(wx, wy, now + 1, j);
}
}
else dfs(nx, ny, now + 1, i);
vis[y][x] = 0;
}
int main()
{
scanf("%d%d", &n, &b);
for (int i = 1; i <= n; i++)
m[i][0] = m[i][n + 1] = m[0][i] = m[n + 1][i] = 2;
for (int i = 1; i <= b; i++)
{
char c;
int x, y;
cin >> c;
x = c - 'A' + 1;
scanf("%d", &y);
m[y][x] = 2;
}
dfs(1, 1, 1, 1);//右
dfs(1, 1, 1, 2);//下
printf("%d", maxn);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步