#include<bits/stdc++.h>
using namespace std;
char m[20][20];
int x,y,d1;//牛
int xx,yy,d2;//人
bool judge(int i,int j){//无障碍则返回true,否则返回false
if(i < 1 || i > 10 || j < 1 || j > 10) return false;
if(m[i][j] == '*') return false;
return true;
}
int main() {
int min = 0;
//0:北 1:东 2:南 3 :西
for(int i = 1;i <= 10;i++){
for(int j = 1;j <= 10;j++){
cin >> m[i][j];
if(m[i][j] == 'C'){
x = i;
y = j;
}else if(m[i][j] == 'F'){
xx = i;
yy = j;
}
}
}
//int f1 = x,y1 = y,k1 = d1;
//int f2 = xx,y2 = yy,k2 = d2;
while(x != xx || y != yy){
min++;
if(min >= 11111110){
cout << 0;
return 0;//不能写break
}
if(d1 == 0){//向北
if(judge(x - 1,y)) x--;
else d1 = 1;
}else if(d1 == 1){
if(judge(x,y + 1)) y++;
else d1 = 2;
}else if(d1 == 2){
if(judge(x + 1,y)) x++;
else d1 = 3;
}else if(d1 == 3){
if(judge(x,y - 1)) y--;
else d1 = 0;
}
if(d2 == 0){//向北
if(judge(xx - 1,yy)) xx--;
else d2 = 1;
}else if(d2 == 1){
if(judge(xx,yy + 1)) yy++;
else d2 = 2;
}else if(d2 == 2){
if(judge(xx + 1,yy)) xx++;
else d2 = 3;
}else if(d2 == 3){
if(judge(xx,yy - 1)) yy--;
else d2 = 0;
}
}
if(x == xx || y == yy) cout << min;
return 0;
}
是第32行的代码,我不知道为什么把return 0;改成break;就会有问题,这时候就只有89分,并且对于数据点3不仅会输出0,还会打印min,但我的问题是跳出循环后if条件满足吗?如果满足那不就本来就相遇了吗?