蓝桥杯 算法提高 Cat And Mouse
题目描述
- 资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
- 问题描述
猫和老鼠在10×10的方格中运动(如图3-6),例如:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
C=猫(CAT)
M=老鼠(MOUSE)
*=障碍物
.=空地
猫和老鼠每秒中走一格,如果在某一秒末它们在同一格中,我们称它们“相遇”。
注意:“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90°。一开始它们都面向北方。
编程计算多少秒以后他们相遇。
方案1 模拟
#include<iostream>
#include<string>
#include<Windows.h>
using namespace std;
string mp[10] ={
"*...*.....",
"......*...",
"...*...*..",
"..........",
"...*.C....",
"*.....*...",
"...*......",
"..M......*",
"...*.*....",
".*.*......"
};
int dx[4]={-1, 0, 1, 0};
int dy[4]={0, 1, 0, -1};
int d1=0;
int d2=0;
int x1=4, y1=5;
int x2=7, y2=2;
int ans;
int main(){
while(x1!=x2 || y1!=y2){
x1 += dx[d1];
y1 += dy[d1];
x2 += dx[d2];
y2 += dy[d2];
if(x1<0 || x1>9 || y1<0 || y1>9 || mp[x1][y1]=='*'){
x1 -= dx[d1];
y1 -= dy[d1];
d1 = (d1+1)%4;
}
if(x2<0 || x2>9 || y2<0 || y2>9 || mp[x2][y2]=='*'){
x2 -= dx[d2];
y2 -= dy[d2];
d2 = (d2+1)%4;
}
++ans;
}
cout << ans << endl;
return 0;
}