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

24 篇文章 0 订阅



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


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;     
}   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值