意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

USACO Section 5.2 Snail Trail - 很水的枚举..

来源:恒创科技 编辑:恒创科技编辑部
2024-02-02 10:01:59



就按题目要求枚举出所有情况吧~~~就是从1,1开始DFS...值得注意的是其实一条路径结束的条件除了碰到自己~~还有就是被边境或#给夹得没地方去~~我就因为少考虑了这个WA了一次....


USACO Section 5.2 Snail Trail - 很水的枚举..


Program:

/*  
ID: zzyzzy12
LANG: C++
TASK: snail
*/
#include<iostream>
#include<istream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stack>
#include<map>
#include<algorithm>
#include<queue>
#define oo 2000000005
#define ll long long
#define pi (atan(2)+atan(0.5))*2
using namespace std;
int n,arc[205][205],k,ans;
int go[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
void DFS(int y,int x,int face,int step)
{
if (step-1>ans) ans=step-1;
if (arc[y][x]==1)
{
y-=go[face][1];
x-=go[face][0];
k=(face+1)%4;
if (!arc[y+go[k][1]][x+go[k][0]])
DFS(y+go[k][1],x+go[k][0],k,step);
k=(face+3)%4;
if (!arc[y+go[k][1]][x+go[k][0]])
DFS(y+go[k][1],x+go[k][0],k,step);
return;
}
if (arc[y][x]==2) return;
arc[y][x]=2;
DFS(y+go[face][1],x+go[face][0],face,step+1);
arc[y][x]=0;
}
int main()
{
freopen("snail.in","r",stdin);
freopen("snail.out","w",stdout);
int m,i,j;
char c;
cin>>n>>m;
memset(arc,0,sizeof(arc));
for (i=0;i<=n+1;i++) arc[0][i]=arc[n+1][i]=arc[i][0]=arc[i][n+1]=1;
while (m--)
{
cin>>c>>i;
arc[i][c-'A'+1]=1;
}
ans=0;
DFS(1,1,1,1);
DFS(1,1,2,1);
cout<<ans<<endl;
return 0;
}



上一篇: USACO Section 5.1 Starry Night - 有点麻烦写的题.. 下一篇: 手机怎么远程登录云服务器?