usaco snail trails(dfs)

dfs啊,我还写了好长时间,一天不如一天。

/*
ID:jinbo wu
TASK: snail
LANG:C++
*/ 
#include<bits/stdc++.h>
using namespace std;
char a[150][150];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
bool vis[150][150];
int n,m;
int dfs(int x,int y,int d)
{
	int dx=x+dir[d][0];
	int dy=y+dir[d][1];
	vis[x][y]=1;
	if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&vis[dx][dy]==1)
	{
	 vis[x][y]=0;
	 return 1;
    }
	else if(dx>n||dx<1||dy>n||dy<1||a[dx][dy]=='#')
	{
		int t=(d+1)%4;
		int tx=x+dir[t][0];
		int ty=y+dir[t][1];
		int tmp1=0;
		int tmp2=0;
		if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!vis[tx][ty]&&a[tx][ty]!='#')
		tmp1=dfs(tx,ty,t);
		t=(d+3)%4;
		tx=x+dir[t][0];
		ty=y+dir[t][1];
		if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&!vis[tx][ty]&&a[tx][ty]!='#')
		tmp2=dfs(tx,ty,t);
		int ans=max(tmp1,tmp2);
		vis[x][y]=0;
		return ans+1; 
	}
	int tmp=dfs(dx,dy,d);//开市就错在这里我先把vis=0后在dfs的明显不行。
	vis[x][y]=0;
	return 1+tmp; 
}
int main()
{
	freopen("snail.in","r",stdin);
	freopen("snail.out","w",stdout);
	cin>>n>>m;
	char c;
	int b;
	for(int i=0;i<m;i++)
	{
		getchar();
		scanf("%c%d",&c,&b);
		a[b][c-'A'+1]='#';
	}
	int tmp1=dfs(1,1,0);
	int tmp2=dfs(1,1,1);
	cout<<max(tmp1,tmp2)<<endl;
	 
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值