逃离迷宫HDU - 1728

逃离迷宫HDU - 1728

 

主要是要记录转弯的次数。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #define ll long long
 4 using namespace std;
 5 int n,m,gx,gy,p[110][110],k;
 6 int dx[] = {1,0,-1,0},dy[] = {0,-1,0,1};
 7 char str[110][110];
 8 bool flag;
 9 
10 void dfs (int x, int y, int dir)  {  
11     if (x == gx && y == gy)  {  
12         if (p[x][y] <= k)  
13             flag = true;  
14         return ;  
15     }  
16     if ((x !=gx && y != gy && p[x][y] == k)||p[x][y]>k)  
17         return ;  
18     for (int i = 0; i < 4; i++)  {  
19         int tx = x + dx[i];  
20         int ty = y + dy[i];  
21         if (tx < 0 || tx >= m|| ty < 0 || ty >= n)  
22             continue;  
23         if (str[tx][ty] == '*' || p[tx][ty] < p[x][y])  
24             continue;  
25         if (dir != -1 && i != dir && p[tx][ty] == p[x][y] )  
26             continue;          
27         if (dir != -1 && i != dir)  
28             p[tx][ty]=p[x][y]+1; 
29         else p[tx][ty] = p[x][y];  
30         dfs (tx, ty, i);  
31         if (flag) return ;  
32     }  
33 }  
34 
35 int main(){
36     int t,qx,qy;
37     scanf("%d",&t);
38     while(t--){
39         scanf("%d%d",&m,&n);
40         for(int i = 0; i < m; i ++)
41             scanf("%s",str[i]);
42         scanf("%d%d%d%d%d",&k,&qy,&qx,&gy,&gx);
43         qx--;qy--;gx--;gy--;
44         for(int i = 0; i < 110; i ++)
45             for(int j = 0; j < 110; j ++)
46                 p[i][j] = 100000;
47         p[qx][qy] = 0;
48         flag = false;
49         dfs(qx,qy,-1);
50         if(flag)puts("yes");
51         else puts("no");
52     }
53     return 0;
54 } 

 

转载于:https://www.cnblogs.com/xingkongyihao/p/7124428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值