poj 冰壶 数组开笑了 调了半天

#include<iostream>
int hang,lie;
int data[25][25];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int sx,sy,ex,ey;
int flag;

int min=1000000;

void dfs(int x,int y,int step)
{   
	if(step>=10)
		return;

	for(int i=0;i<4;i++)
	{
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(/*nx>=0&&nx<hang&&ny>=0&&ny<lie&&*/data[nx][ny]==1)
			continue;
		  while(!data[nx][ny])
		   { 
			   nx+=dx[i];
			   ny+=dy[i];
			   
		   }
			   if(nx>=0&&nx<hang&&ny>=0&&ny<lie)
			   {
			         if(data[nx][ny]==1)
			         {
				      data[nx][ny]=0;
				      dfs(nx-dx[i],ny-dy[i],step+1);
				      data[nx][ny]=1;
			         }
		         }
			   if(data[nx][ny]==3)
			   {   
				   if(min>step+1)
				     min=step+1;
				  
			   }

	      }
	 }
int main()
{   
	freopen("input.txt","r",stdin);
	while(scanf("%d%d",&lie,&hang),lie&&hang)
	{        min = 1000000;//
		     for(int i=0;i<25;i++)
	        for(int j=0;j<25;j++)
				data[i][j]=-1;
		for(int i=0;i<hang;i++)
			for(int j=0;j<lie;j++)
				scanf("%d",&data[i][j]);
		
		  for(int i=0;i<hang;i++)
			{  for(int j=0;j<lie;j++)
			  {
				  if(data[i][j]==2)
					  {
						  data[i][j]=0;
						  sx=i;
				          sy=j;
				      }
		          } 
		      }
			  dfs(sx,sy,0);
			 if(min < 1000000)
             printf("%d\n",min) ;
             else
            printf("-1\n") ;

	}

}

 

转载于:https://www.cnblogs.com/dahuacarry/p/6400062.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值