乐羊羊与灰二狼

2024-03-11 01:59
文章标签 乐羊羊 灰二狼

本文主要是介绍乐羊羊与灰二狼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

风和日丽,乐羊羊去迷宫里面吃草,为什么去迷宫吃草呢?因为没有其他羊进去,所以草木茂盛。灰二狼经过一番观察,摸清楚了乐羊羊吃草的地方。也偷偷摸进了迷宫。迷宫大小 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;
    }
    
}
 

这篇关于乐羊羊与灰二狼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796242

相关文章

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。

【问题描述】 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。 输入:一个整数n,表示开始购买的饮料数量(0<n<10000) 输出:一个整数,表示实际得到的饮料数 样例输入: 100 样例输出: 149

蓝桥杯 — 饮料换购(乐羊羊饮料厂正在举办一次促销优惠活动)

题目要求如下: 饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。 输入:一个整数n,表示开始购买的饮料数量(0<n<10000) 输出:一个整数,表示实际得到的饮料数 例如: 用户输入