#19626: RE Aborted


nevikw39 (牜攵)

學校 : 國立臺中第一高級中學
編號 : 89903
來源 : [140.114.207.96]
最後登入時間 :
2023-05-16 17:02:16
b059. 4. 靈犬尋寶 -- 95學年度全國資訊學科能力競賽 | From: [106.107.240.213] | 發表日期 : 2019-10-15 20:42

#0: 100% RE (SIGABRT)

系統呼叫了 abort 函式!
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)

 

 

這是記憶體用完嗎??應該不太可能吧  QQ

我是把障礙放到 set 中,把起點放入佇列,由八個方向開始 BFS。

程式碼很醜請見諒:

#include <iostream>
#include <set>
#include <queue>
#define endl '\n'
using namespace std;
struct node
{
    short x, y, d;
    node(short _x, short _y, short _d)
    {
        x = _x;
        y = _y;
        d = _d;
    }
};
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);
    short n;
    set<pair<short, short>> s;
    while (cin >> n)
    {
        short min = 9999;
        while (n--)
        {
            short x, y;
            cin >> x >> y;
            s.insert({x, y});
        }
        short sx, sy, dx, dy;
        cin >> sx >> sy >> dx >> dy;
        queue<node> q;
        q.push(node(sx, sy, 0));
        while (q.size())
        {
            node tmp = q.front();
            q.pop();
            if (tmp.x == dx && tmp.y == dy && min > tmp.d)
            {
                min = tmp.d;
                break;
            }
            if (tmp.x + 1 < 100 && !s.count({tmp.x + 1, tmp.y}))
            {
                if (tmp.x + 3 < 100 && tmp.y + 1 < 100 && !s.count({tmp.x + 3, tmp.y + 1}))
                    q.push(node(tmp.x + 3, tmp.y + 1, tmp.d + 1));
                if (tmp.x + 3 < 100 && tmp.y - 1 >= 0 && !s.count({tmp.x + 3, tmp.y - 1}))
                    q.push(node(tmp.x + 3, tmp.y - 1, tmp.d + 1));
            }
            if (tmp.y - 1 >= 0 && !s.count({tmp.x, tmp.y - 1}))
            {
                if (tmp.x + 1 < 100 && tmp.y - 3 >= 0 && !s.count({tmp.x + 1, tmp.y - 3}))
                    q.push(node(tmp.x + 1, tmp.y - 3, tmp.d + 1));
                if (tmp.x - 1 >= 0 && tmp.y - 3 >= 0 && !s.count({tmp.x - 1, tmp.y - 3}))
                    q.push(node(tmp.x - 1, tmp.y - 3, tmp.d + 1));
            }
            if (tmp.x - 1 >= 0 && !s.count({tmp.x - 1, tmp.y}))
            {
                if (tmp.x - 3 >= 0 && tmp.y - 1 >= 0 && !s.count({tmp.x - 3, tmp.y - 1}))
                    q.push(node(tmp.x - 3, tmp.y - 1, tmp.d + 1));
                if (tmp.x - 3 >= 0 && tmp.y + 1 < 100 && !s.count({tmp.x - 3, tmp.y + 1}))
                    q.push(node(tmp.x - 3, tmp.y + 1, tmp.d + 1));
            }
            if (tmp.y + 1 < 100 && !s.count({tmp.x, tmp.y + 1}))
            {
                if (tmp.x - 1 >= 0 && tmp.y + 3 < 100 && !s.count({tmp.x - 1, tmp.y + 3}))
                    q.push(node(tmp.x - 1, tmp.y + 3, tmp.d + 1));
                if (tmp.x + 1 < 100 && tmp.y + 3 < 100 && !s.count({tmp.x + 1, tmp.y + 3}))
                    q.push(node(tmp.x + 1, tmp.y + 3, tmp.d + 1));
            }
        }
        cout << (min != 9999 ? to_string(min) : "impossible") << '\n';
    }
    return 0;
}

範例測資是有過,請大家幫我看一下,感謝!!

 
#20106: Re:RE Aborted


nevikw39 (牜攵)

學校 : 國立臺中第一高級中學
編號 : 89903
來源 : [140.114.207.96]
最後登入時間 :
2023-05-16 17:02:16
b059. 4. 靈犬尋寶 -- 95學年度全國資訊學科能力競賽 | From: [210.60.35.241] | 發表日期 : 2019-12-02 13:51

#0: 100% RE (SIGABRT)

系統呼叫了 abort 函式!
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)

 

 

這是記憶體用完嗎??應該不太可能吧  QQ

我是把障礙放到 set 中,把起點放入佇列,由八個方向開始 BFS。

程式碼很醜請見諒:

#include 
#include 
#include 
#define endl '\n'
using namespace std;
struct node
{
    short x, y, d;
    node(short _x, short _y, short _d)
    {
        x = _x;
        y = _y;
        d = _d;
    }
};
int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);
    short n;
    set<pair<short, short>> s;
    while (cin >> n)
    {
        short min = 9999;
        while (n--)
        {
            short x, y;
            cin >> x >> y;
            s.insert({x, y});
        }
        short sx, sy, dx, dy;
        cin >> sx >> sy >> dx >> dy;
        queue q;
        q.push(node(sx, sy, 0));
        while (q.size())
        {
            node tmp = q.front();
            q.pop();
            if (tmp.x == dx && tmp.y == dy && min > tmp.d)
            {
                min = tmp.d;
                break;
            }
            if (tmp.x + 1 < 100 && !s.count({tmp.x + 1, tmp.y}))
            {
                if (tmp.x + 3 < 100 && tmp.y + 1 < 100 && !s.count({tmp.x + 3, tmp.y + 1}))
                    q.push(node(tmp.x + 3, tmp.y + 1, tmp.d + 1));
                if (tmp.x + 3 < 100 && tmp.y - 1 >= 0 && !s.count({tmp.x + 3, tmp.y - 1}))
                    q.push(node(tmp.x + 3, tmp.y - 1, tmp.d + 1));
            }
            if (tmp.y - 1 >= 0 && !s.count({tmp.x, tmp.y - 1}))
            {
                if (tmp.x + 1 < 100 && tmp.y - 3 >= 0 && !s.count({tmp.x + 1, tmp.y - 3}))
                    q.push(node(tmp.x + 1, tmp.y - 3, tmp.d + 1));
                if (tmp.x - 1 >= 0 && tmp.y - 3 >= 0 && !s.count({tmp.x - 1, tmp.y - 3}))
                    q.push(node(tmp.x - 1, tmp.y - 3, tmp.d + 1));
            }
            if (tmp.x - 1 >= 0 && !s.count({tmp.x - 1, tmp.y}))
            {
                if (tmp.x - 3 >= 0 && tmp.y - 1 >= 0 && !s.count({tmp.x - 3, tmp.y - 1}))
                    q.push(node(tmp.x - 3, tmp.y - 1, tmp.d + 1));
                if (tmp.x - 3 >= 0 && tmp.y + 1 < 100 && !s.count({tmp.x - 3, tmp.y + 1}))
                    q.push(node(tmp.x - 3, tmp.y + 1, tmp.d + 1));
            }
            if (tmp.y + 1 < 100 && !s.count({tmp.x, tmp.y + 1}))
            {
                if (tmp.x - 1 >= 0 && tmp.y + 3 < 100 && !s.count({tmp.x - 1, tmp.y + 3}))
                    q.push(node(tmp.x - 1, tmp.y + 3, tmp.d + 1));
                if (tmp.x + 1 < 100 && tmp.y + 3 < 100 && !s.count({tmp.x + 1, tmp.y + 3}))
                    q.push(node(tmp.x + 1, tmp.y + 3, tmp.d + 1));
            }
        }
        cout << (min != 9999 ? to_string(min) : "impossible") << '\n';
    }
    return 0;
}

範例測資是有過,請大家幫我看一下,感謝!!


我終於AC惹

記得注意形成循環無窮迴圈的狀況!!

 
ZeroJudge Forum