洛谷上的题解看起来有点麻烦,我发下自己的题解
怎么判断遇不到?
死循环不就遇不到了!!!
代码如下:
#include<iostream>
using namespace std;
void move(int &x, int &y, int &d);
int arr[10][10] = { 0 };
int main() {
char c;
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
int d1 = 0;//人方向
int d2 = 0;//牛方向
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cin >> c;
if (c == '*')arr[i][j] = 0;
else if (c == '.')arr[i][j] = 1;
else if (c == 'F') {
arr[i][j] = 1;
x1 = j; y1 = i;//记录人初位置
}
else if (c == 'C') {
arr[i][j] = 1;
x2 = j; y2 = i;//记录牛初位置
}
}
}//将地图转化为二维数组
int num = 0;
while (true)
{
move(x1, y1, d1);//人动
move(x2, y2, d2);//牛动
num++;
if (x1 == x2 && y1 == y2) {
cout << num;
break;
}//相遇
else if (num > 160000) {
cout << 0;
break;
}//死循环
}
return 0;
}
void move(int &x, int &y, int &d) {
if (d == 0) {
if (y - 1 < 0 || arr[y - 1][x] == 0) {
d = 1;
}
else {
y--;
}
}
else if (d == 1) {
if (x + 1 > 9 || arr[y][x + 1] == 0) {
d = 2;
}
else {
x++;
}
}
else if (d == 2) {
if (y + 1 > 9 || arr[y + 1][x] == 0) {
d = 3;
}
else {
y++;
}
}
else if (d == 3) {
if (x - 1 < 0 || arr[y][x - 1] == 0) {
d = 0;
}
else {
x--;
}
}
}