因为一行代码造成了结果的差异
查看原帖
因为一行代码造成了结果的差异
586493
theBeatles楼主2023/9/10 17:09
#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条件满足吗?如果满足那不就本来就相遇了吗?

2023/9/10 17:09
加载中...