本文主要是介绍乐羊羊与灰二狼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
风和日丽,乐羊羊去迷宫里面吃草,为什么去迷宫吃草呢?因为没有其他羊进去,所以草木茂盛。灰二狼经过一番观察,摸清楚了乐羊羊吃草的地方。也偷偷摸进了迷宫。迷宫大小 n×n,假设乐羊羊和灰二狼都在迷宫内,迷宫只能上下左右移动,并且每分钟只能移动一格。出于动物的本能,他们都顺着直线朝前面走,如果遇到边界或者障碍就花一分钟时间右转,初始状态他们都面向北方。
L代表乐羊羊
H灰二狼
*可以通行
#障碍物
请你帮助灰二狼计算多少分钟后可以和乐羊羊相遇。相遇是指,在某一分钟结束,灰二郎和乐羊羊在同一方格内,注意路过或者穿过不算哦。
输入描述
输入一个 n。
输入一个 n×n 的矩阵。*代表可以通行,#代表障碍物,L代表乐羊羊,H代表灰二狼。
输出描述
输出多少分钟,他们相遇。如果相遇时间超过60分钟,输出“no”。
样例输入 1
5 ***** #L*** ***#* **H** ***#*
样例输出 1
3
提示
数据范围与提示
1<n≤10
样例解释
如上图所示:
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;
}
}
这篇关于乐羊羊与灰二狼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!