乐羊羊与灰二狼

风和日丽,乐羊羊去迷宫里面吃草,为什么去迷宫吃草呢?因为没有其他羊进去,所以草木茂盛。灰二狼经过一番观察,摸清楚了乐羊羊吃草的地方。也偷偷摸进了迷宫。迷宫大小 n×n,假设乐羊羊和灰二狼都在迷宫内,迷宫只能上下左右移动,并且每分钟只能移动一格。出于动物的本能,他们都顺着直线朝前面走,如果遇到边界或者障碍就花一分钟时间右转,初始状态他们都面向北方。
L代表乐羊羊
H灰二狼
*可以通行
#障碍物
 

image.png


请你帮助灰二狼计算多少分钟后可以和乐羊羊相遇。相遇是指,在某一分钟结束,灰二郎和乐羊羊在同一方格内,注意路过或者穿过不算哦。

输入描述

输入一个 n。
输入一个 n×n 的矩阵。*代表可以通行,#代表障碍物,L代表乐羊羊,H代表灰二狼。

输出描述

输出多少分钟,他们相遇。如果相遇时间超过60分钟,输出“no”。

样例输入 1 

5
*****
#L***
***#*
**H**
***#*

样例输出 1 

3

提示

数据范围与提示

1<n≤10

样例解释

image.png


如上图所示:
L 向上一步 1 分钟,右转 1分钟,向右一步 1分钟。
H 向上一步 1 分钟,向上一步 1 分钟,向上一步 1 分钟。
L 和 H 刚好在,下标 (1,3)点相遇,用了3分钟。

代码:

#include<iostream>
using namespace std;
char map[12][12];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int n,mi=99;
void dfs(int min,int direction1,int direction2,int x1,int y1,int x2,int y2){
//    cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;
    if(x1==x2&&y1==y2){
        mi=min;
        return ;
    }
    if(min>60){
        return ;
    }
    int nd1=direction1,nd2=direction2;
    int nx1=x1+dx[direction1];
    int ny1=y1+dy[direction1];
    int nx2=x2+dx[direction2];
    int ny2=y2+dy[direction2];
    if(nx1>=1&&nx1<=n&&ny1>=1&&ny1<=n&&map[nx1][ny1]=='*'){
    }else{
        nx1=x1,ny1=y1;
        nd1=(direction1+1)%4;
    }
    if(nx2>=1&&nx2<=n&&ny2>=1&&ny2<=n&&map[nx2][ny2]=='*'){
    }else{
        nx2=x2,ny2=y2;
        nd2=(direction2+1)%4;
    }
    dfs(min+1,nd1,nd2,nx1,ny1,nx2,ny2);
}
int main(){
    cin>>n;
    int x1,y1,x2,y2;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>map[i][j];
            if(map[i][j]=='L'){
                x1=i,y1=j;
                map[i][j]='*';
            }
            if(map[i][j]=='H'){
                x2=i,y2=j;
                map[i][j]='*';
            }
        }
    }
    dfs(0,0,0,x1,y1,x2,y2);
    if(mi==99){
        cout<<"no";
    }
    else{
        cout<<mi;
    }
    
}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值