Curling 2.0 POJ 3009(搜索)

Posted vbel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Curling 2.0 POJ 3009(搜索)相关的知识,希望对你有一定的参考价值。

原题

题目链接

题目分析

注意题目给的条件,石头到终点会终止.石头碰到冰块会停止,冰块消失.石头滑出边界,游戏失败.石头必须在10回合内到达终点否则游戏失败.按照这个条件写个dfs,记录一下深度就行了.

代码

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <utility>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <cstring>
 7 #include <string>
 8 #include <vector>
 9 #include <stack>
10 #include <queue>
11 #include <map>
12 #include <set> 
13 
14 using namespace std;
15 const int INF=0x3f3f3f3f; 
16 
17 int n,m;
18 int mapp[20][20];
19 int dx[]=1,-1,0,0,dy[]=0,0,1,-1;
20 int ans;
21 
22 void dfs(int x,int y,int deep)
23 
24 //    printf("now x=%d y=%d\n",x,y);
25     if(deep==10) return ;
26     for(int i=0;i<4;i++)
27     
28         bool fault=false;
29         int nx=x+dx[i],ny=y+dy[i];
30         if(nx>=0&&nx<n&&ny>=0&&ny<m&&mapp[nx][ny]!=1)
31         
32 //            printf("before nx=%d ny=%d\n",nx,ny);
33             while(mapp[nx][ny]!=1&&mapp[nx][ny]!=3) 
34             
35                 nx+=dx[i],ny+=dy[i];
36                 if(nx<0||nx>=n||ny<0||ny>=m)
37                 
38                     fault=true;
39                     break;
40                 
41             
42             if(fault) continue;
43 //            printf("after nx=%d ny=%d\n",nx,ny);
44             if(mapp[nx][ny]==3)
45             
46                 if(!ans) ans=deep+1;
47                 else ans=min(ans,deep+1);
48             
49             else
50             
51                 mapp[nx][ny]=0;
52                 dfs(nx-dx[i],ny-dy[i],deep+1);
53                 mapp[nx][ny]=1;
54             
55         
56     
57     return ;
58 
59 
60 int main()
61 
62 //    freopen("black.in","r",stdin);
63 //    freopen("black.out","w",stdout);
64     while(~scanf("%d %d",&m,&n)&&n&&m)
65     
66         ans=0;
67         int x,y;
68         for(int i=0;i<n;i++)
69         for(int j=0;j<m;j++)
70         
71             scanf("%d",&mapp[i][j]);
72             if(mapp[i][j]==2) x=i,y=j;
73         
74         dfs(x,y,0);
75         if(ans) printf("%d\n",ans);
76         else printf("-1\n");
77     
78     return 0;
79 

 

以上是关于Curling 2.0 POJ 3009(搜索)的主要内容,如果未能解决你的问题,请参考以下文章

poj 3009 Curling 2.0

POJ 3009 Curling 2.0

POJ 3009 ( Curling 2.0 )

poj 3009 Curling 2.0

POJ3009-Curling 2.0(WA)

POJ 3009 Curling 2.0