您的位置:首页 > 大数据 > 人工智能

USACO 5.2 Snail Trails(DFS)

2013-05-20 10:50 411 查看
DFS,1Y啊。。

/*
ID: cuizhe
LANG: C++
TASK: snail
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std;
int a[4] = {0,1,-1,0};
int b[4] = {1,0,0,-1};
int o[201][201];
int n,ans;
void dfs(int x,int y,int pos,int step)
{
int i;
ans = max(step,ans);
if(x+a[pos] <= n&&x+a[pos] >= 1&&y+b[pos] >= 1&&y+b[pos] <= n&&!o[x+a[pos]][y+b[pos]])
{
o[x+a[pos]][y+b[pos]] = 2;
dfs(x+a[pos],y+b[pos],pos,step+1);
o[x+a[pos]][y+b[pos]] = 0;
}
else  if(x+a[pos] <= n&&x+a[pos] >= 1&&y+b[pos] >= 1&&y+b[pos] <= n&&o[x+a[pos]][y+b[pos]] == 2)
{
return ;
}
else
{
for(i = 0; i < 4; i ++)
{
if(pos == 0||pos == 3)
{
if(i == 1||i == 2)
{
if(x+a[i] <= n&&x+a[i] >= 1&&y+b[i] >= 1&&y+b[i] <= n&&!o[x+a[i]][y+b[i]])
{
o[x+a[i]][y+b[i]] = 2;
dfs(x+a[i],y+b[i],i,step+1);
o[x+a[i]][y+b[i]] = 0;
}
}
}
else
{
if(i == 0||i == 3)
{
if(x+a[i] <= n&&x+a[i] >= 1&&y+b[i] >= 1&&y+b[i] <= n&&!o[x+a[i]][y+b[i]])
{
o[x+a[i]][y+b[i]] = 2;
dfs(x+a[i],y+b[i],i,step+1);
o[x+a[i]][y+b[i]] = 0;
}
}
}
}
}
return ;
}
int main()
{
int m,i,j,len,sv,ev;
char ch[101];
freopen("snail.in","r",stdin);
freopen("snail.out","w",stdout);
scanf("%d%d",&n,&m);
for(i = 0; i < m; i ++)
{
scanf("%s",ch);
len = strlen(ch);
sv = ch[0]-'A' + 1;
ev = 0;
for(j = 1; j < len; j ++)
{
ev = ev*10 + ch[j]- '0';
}
o[sv][ev] = 1;
}
o[1][1] = 2;
dfs(1,1,0,1);
dfs(1,1,1,1);
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: