BRAVEDUCK 소스 검토 부탁드려요

  • jjangguboy
    jjangguboy

    //STL을 사용해서 짰는데요
    //디버깅통해서 진행상황보면 잘 되는거 같은데 오답이 뜨네요

    #include<iostream>
    #include<queue>
    using namespace std;
    
    typedef struct point{
        int x, y, visit;
    }point;
    
    int pow(int a)
    {
        return a*a;
    }
    
    int chk(int x1, int x2, int y1, int y2)
    {
        return (pow(x2 - x1) + pow(y2 - y1));
    }
    
    int main()
    {
        queue<pair<int, int>> q;
    
        int jump, stNum, n, pass, x, y;
        point start, end, st[100];
    
        cin >> n;
    
        for (int j = 0; j < n; j++) // 입력
        {
            pass = false;
            cin >> jump >> start.x >> start.y >> end.x >> end.y >> stNum;
    
            q.push(make_pair(start.x, start.y));    // 시작점 큐에 넣기
    
            x = start.x;
            y = start.y;
    
            for (int i = 0; i < stNum; i++) // 돌 개수 만큼 반복문
                cin >> st[i].x >> st[i].y;
    
            while (!q.empty() && !pass){
                for (int i = 0; i < stNum; i++)
                {
                    if (pow(jump) >= chk(x, end.x, y, end.y)){  // 돌 좌표에서 도착지점까지 도착할 수 있을 때 종료
                        pass = true;
                        break;
                    }
                    else if (pow(jump) >= chk(x, st[i].x, y, st[i].y) && st[i].visit != 1)  
                    {
                        q.push(make_pair(st[i].x, st[i].y));
                        st[i].visit = 1;
                    }
                }
                q.pop();
                if (!q.empty()){
                    auto p = q.front();
                    x = p.first;
                    y = p.second;
                }
            }
            if (pass) cout << "YES" << endl;
            else cout << "NO" << endl;
        }
        return 0;
    }
    
    
    ~~~ ( )
    

    8년 전
1개의 댓글이 있습니다.
  • seico75
    seico75

    여러 예제를 한꺼번에 넣고도 돌려보셨나요?
    st[i].visit 초기화를 안해줘서 한번은 돌아도 여러번 돌리면 문제가 있을 것으로 보입니다.
    그리고,
    "// 돌 좌표에서 도착지점까지 도착할 수 있을 때 종료" 이 부분이 루프 안에 있어야 하나요?


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.