D - Curling 2.0
src="https://vjudge.net/problem/description/8027?1515920229000" width="100%" height="3299px" frameborder="0" scrolling="no" style="box-sizing: inherit;">
#include<stdio.h>
int map[25][25];
int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; //0上,1左,2下,3右
int flag, sum, w, h;
void dfs(int x, int y, int step)
{
int nx,ny, tx,ty, px,py;
if(step > 10)
return;
if(map[x][y] == 3)
if(step<sum)
{
flag=1;
sum=step;
return;
}
for(int i=0; i<4; i++)
{
tx=x+dir[i][0];
ty=y+dir[i][1];
nx=x;
ny=y;
while(tx>=0 && tx<h && ty>=0 && ty<w && map[tx][ty]!=1)
{
nx+=dir[i][0];
ny+=dir[i][1];
if(map[nx][ny]==3)
if(step<sum)
{
flag=1;
sum=step;
return;
}
tx=nx+dir[i][0];
ty=ny+dir[i][1];
if(tx<0 || tx>=h || ty<0 || ty>=w)
break;
if(map[tx][ty] == 1)
{
map[tx][ty] = 0;
dfs(nx, ny, step+1);
map[tx][ty] = 1;
}
}
}
}
int main()
{
int sx,sy;
while(~scanf("%d %d",&w,&h))
{
if(w==0 && h==0)
break ;
sum=999999;
for(int i=0; i<h; i++)
for(int j=0; j<w; j++)
{
scanf("%d",&map[i][j]);
if(map[i][j] == 2)
{
sx = i;
sy = j;
}
}
dfs(sx, sy, 1);
if(flag && sum<11)
printf("%d\n", sum);
else
printf("-1\n");
}
return 0;
}