洛谷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;
}
原文地址:https://www.cnblogs.com/liuwenyao/p/11722202.html