码迷,mamicode.com
首页 > 其他好文 > 详细

usaco Snail Trails

时间:2015-10-06 01:52:08      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

N没有给数据范围是这题最恶心的地方,因为这个wa了有点恶心。

/*
ID: modengd1
PROG: snail
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;
char Map[200][200];
bool vis[200][200];
int N,M;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int ans;
void DFS(int x,int y,int dir,int step)
{
    ans=max(ans,step);
    if(x+dx[dir]<0||x+dx[dir]>=N||y+dy[dir]<0||y+dy[dir]>=N||Map[x+dx[dir]][y+dy[dir]]==‘#‘)
    {
        int d=(dir+1)%4;
        if(!(x+dx[d]<0||x+dx[d]>=N||y+dy[d]<0||y+dy[d]>=N||Map[x+dx[d]][y+dy[d]]==‘#‘||vis[x+dx[d]][y+dy[d]]))
        {
            vis[x+dx[d]][y+dy[d]]=true;
            DFS(x+dx[d],y+dy[d],d,step+1);
            vis[x+dx[d]][y+dy[d]]=false;
        }
        d=(4+dir-1)%4;
        if(!(x+dx[d]<0||x+dx[d]>=N||y+dy[d]<0||y+dy[d]>=N||Map[x+dx[d]][y+dy[d]]==‘#‘||vis[x+dx[d]][y+dy[d]]))
        {
            vis[x+dx[d]][y+dy[d]]=true;
            DFS(x+dx[d],y+dy[d],d,step+1);
            vis[x+dx[d]][y+dy[d]]=false;
        }
    }
    else if(!vis[x+dx[dir]][y+dy[dir]])
    {
        vis[x+dx[dir]][y+dy[dir]]=true;
        DFS(x+dx[dir],y+dy[dir],dir,step+1);
        vis[x+dx[dir]][y+dy[dir]]=false;
    }
}
int main()
{
    freopen("snail.in","r",stdin);
    freopen("snail.out","w",stdout);
    char y;
    int x;
    memset(vis,false,sizeof(vis));
    scanf("%d%d",&N,&M);
    getchar();
    for(int i=0;i<M;i++)
    {
        scanf("%c%d",&y,&x);
        Map[x-1][y-‘A‘]=‘#‘;
        getchar();
    }
    ans=0;
    DFS(0,0,0,1);
    memset(vis,false,sizeof(vis));
    DFS(0,0,1,1);
    cout<<ans<<endl;
    return 0;
}

  

usaco Snail Trails

标签:

原文地址:http://www.cnblogs.com/modengdubai/p/4856603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!