2 u013921650 u013921650 于 2014.09.06 15:37 提问

poj3009题无法AC,但是测试数据对,如何解决
acm

#include
int ans;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int m,n;
int square[30][30]={0};

void dfs(int x,int y,int step);

int main()
{
int i,j;
int p,q;
ans=12;
while(scanf("%d%d",&m,&n)!=EOF&&(m+n))
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&square[i][j]);
if(square[i][j]==2)
{
square[i][j]=0;
p=i;
q=j;
}
}
dfs(p,q,0);
if(ans<11)
printf("%d\n",ans);
else
printf("-1\n");
}
}

void dfs(int x,int y,int step)
{
int i,xx1,yy1,xx,yy;
if(step>10)
return;
for(i=0;i {
xx=x+dx[i];
yy=y+dy[i];
if(step=0&&xx=0&&yy {
while(xx>=0&&xx=0&&yy {
xx=xx+dx[i];
yy=yy+dy[i];
}
xx1=xx-dx[i];
yy1=yy-dy[i];
if(xx>=0&&xx=0&&yy<m)
{
if(square[xx][yy]==3)
ans=step+1;
else
{
square[xx][yy]=0;
dfs(xx1,yy1,step+1);
square[xx][yy]=1;
}
}
}
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!