Curling 2.0

http://poj.org/problem?id=3009

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<cmath>

 4 #include<cstdlib>

 5 #include<algorithm>

 6 #define MAXN 101

 7 using namespace std;

 8 

 9 int a[MAXN][MAXN];

10 int move[][2]= {{1,0},{-1,0},{0,1},{0,-1}};

11 int n,m,sx,sy,ex,ey,ans;

12 

13 void dfs(int x,int y,int k)

14 {

15     int xx,yy;

16     if(k>=10||k>=ans) return;

17     for(int i=0; i<4; i++)

18     {

19         xx=x+move[i][0];

20         yy=y+move[i][1];

21         if(a[xx][yy]==1) continue;

22         while(1)

23         {

24             if(xx>=0&&xx<m&&yy>=0&&yy<n)

25             {

26                 if(a[xx][yy]==1)

27                 {

28                     a[xx][yy]=0;

29                     dfs(xx-move[i][0],yy-move[i][1],k+1);

30                     a[xx][yy]=1;

31                     break;

32                 }

33                 if(a[xx][yy]==3)

34                 {

35                     ans=min(ans,k+1);

36                     break;

37                 }

38             }

39             else if(!(xx>=0&&xx<m&&yy>=0&&yy<n)) break ;

40             xx=xx+move[i][0];

41             yy=yy+move[i][1];

42         }

43     }

44     return;

45 }

46 

47 int main()

48 {

49     while(scanf("%d%d",&n,&m)&&n&&m)

50     {

51         ans=11;

52         for(int i=0; i<m; i++)

53         {

54             for(int j=0; j<n; j++)

55             {

56                 scanf("%d",&a[i][j]);

57                 if(a[i][j]==2)

58                 {

59                     sx=i;

60                     sy=j;

61                 }

62             }

63         }

64         dfs(sx,sy,0);

65         if(ans==11) printf("-1\n");

66         else printf("%d\n",ans);

67     }

68     return 0;

69 }
View Code

 

你可能感兴趣的:(curl)