
题目链接
注意题目给的条件,石头到终点会终止.石头碰到冰块会停止,冰块消失.石头滑出边界,游戏失败.石头必须在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=%dn",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=%dn",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=%dn",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("%dn",ans);
76 else printf("-1n");
77 }
78 return 0;
79 }
转载于:.html
本文发布于:2024-02-05 05:44:26,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170725472463543.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |