#33395: C++,後面兩題都印出No solution不知為何


e002933 (徐MAN)

學校 : 不指定學校
編號 : 158405
來源 : [111.71.113.217]
最後登入時間 :
2023-11-18 16:56:51
a982. 迷宮問題#1 | From: [118.150.201.99] | 發表日期 : 2023-01-02 12:52

以下是我的程式碼

中間有印出路徑測試都是沒問題的

但最後兩個資測答案卻錯誤

我的答案都印出no solution

不知問題出在哪裡

希望版友們不吝指教

#include<iostream>
using namespace std;
#include<queue>

int main() {
    cin.tie(0);
    cout.tie(0);
    std::ios::sync_with_stdio(false);
    int n;
    cin>>n;
    char a[n+2][n+2];
    for(int i = 0; i < n+2; i++) {
        a[i][0] = '#';
        a[i][n+1] = '#';
        a[0][i] = '#';
        a[n+1][i] = '#';
    }
    for(int i = 1; i <= n; i++ )
        for(int j = 1; j <= n; j++)
            cin>>a[i][j];
    queue<pair<int, int>> walk;
    walk.push({2,2});
    int step[n+2][n+2];
    for(int i = 0; i <= n+1; i++ )
        for(int j = 0; j <= n+1; j++)
            step[i][j] = 0;
    step[2][2] = 1;
    while(!walk.empty()) {
        if(a[walk.front().first+1][walk.front().second] == '.') {
            walk.push({walk.front().first+1,walk.front().second});
            step[walk.back().first][walk.back().second] = step[walk.front().first][walk.front().second] + 1;
        }
        if(a[walk.front().first-1][walk.front().second] == '.') {
            walk.push({walk.front().first-1,walk.front().second});
            step[walk.back().first][walk.back().second] =  step[walk.front().first][walk.front().second] + 1;
        }
        if(a[walk.front().first][walk.front().second+1] == '.') {
            walk.push({walk.front().first,walk.front().second+1});
            step[walk.back().first][walk.back().second] =  step[walk.front().first][walk.front().second] + 1;
        }
        if(a[walk.front().first][walk.front().second]-1 == '.') {
            walk.push({walk.front().first,walk.front().second-1});
            step[walk.back().first][walk.back().second] =  step[walk.front().first][walk.front().second] + 1;
        }
        for(int i = 1; i <= n; i++ ) {
            for(int j = 1; j <= n; j++)
                cout<<step[i][j]<<" ";
            cout<<endl;
        }
        cout<<endl;
        a[walk.front().first][walk.front().second] = '#';
        walk.pop();
    }
    if(step[n-1][n-1] == 0)
        cout<<"No solution!";
    else
        cout<<step[n-1][n-1];
    return 0;
}

 
#33397: Re: C++,後面兩題都印出No solution不知為何


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a982. 迷宮問題#1 | From: [39.9.194.68] | 發表日期 : 2023-01-02 15:13


        if(a[walk.front().first][walk.front().second]-1 == '.') {


向左走有問題,-1要放在中括號裡面

 
#33399: Re: C++,後面兩題都印出No solution不知為何


e002933 (徐MAN)

學校 : 不指定學校
編號 : 158405
來源 : [111.71.113.217]
最後登入時間 :
2023-11-18 16:56:51
a982. 迷宮問題#1 | From: [118.150.201.99] | 發表日期 : 2023-01-02 18:50


        if(a[walk.front().first][walk.front().second]-1 == '.') {


向左走有問題,-1要放在中括號裡面

檢查了那麼多遍居然眼睛大到沒發現這麼明顯的錯誤

非常謝謝您

 
ZeroJudge Forum