braveduck 질문입니다.

  • tkdi000
    tkdi000
    • braveduck 문제 질문입니다. 구조체를 하나 만들어서 위치와 방문 여부를 저장하고 있습니다. 초기 시작 좌표를 넘겨주고 그곳에서 방문 할 수 있는 모든 돌을 스택에 저장한 뒤에 하나씩 빼면서 다시 방문 가능한 돌을 계속 스택에 넣고 있는데요 왜 오답인지 잘 모르겠습니다 도와주시면 감사하겠습니다.. 목적지 좌표도 돌이라고 생각하고 넣었습니다.
    #include <iostream>
    #include <stack>
    #include <math.h>
    
    using namespace std;
    
    typedef struct point
    {
        int x;
        int y;
        bool visited = false;
    }Point;
    
    Point stone[101];
    int N;
    double J;
    int end_x, end_y;
    
    double dis(int x, int y, int end_x, int end_y)
    {
        double res = ((x - end_x) * (x - end_x)) + ((y - end_y) * (y - end_y));
    
        return sqrt(res);
    }
    
    bool Run(int x, int y)
    {
        stack<Point> s;
    
        for (int i = 0; i <= N; i++)
        {
            if (J >= dis(x, y, stone[i].x, stone[i].y))
            {
                stone[i].visited = 1;
                s.push(stone[i]);
            }
        }
    
        while (s.size() > 0)
        {
            Point temp = s.top();
            s.pop();
    
            if (temp.x == end_x && temp.y == end_y)
                return true;
    
            for (int i = 0; i <= N; i++)
            {
                if (!stone[i].visited)
                {
                    if (J >= dis(temp.x, temp.y, stone[i].x, stone[i].y))
                    {
                        stone[i].visited = 1;
                        s.push(stone[i]);
                    }
                }
            }
        }
    
        return false;
    }
    
    int main(int argc, char** argv) {
        int T;
        int test_case;
        int x, y;
    
        int temp_x, temp_y;
        int count;
        int Answer;
    
        //freopen("input.txt", "r", stdin);
    
        setbuf(stdout, NULL);
    
        cin >> T;
    
        for (test_case = 1; test_case <= T; ++test_case) {
    
            cin >> J;
    
            cin >> x >> y >> end_x >> end_y;
    
            cin >> N;
    
            for (int i = 0; i < N; ++i)
            {
                cin >> temp_x >> temp_y;
    
                stone[i].x = temp_x;
                stone[i].y = temp_y;
            }
    
            stone[N].x = end_x;
            stone[N].y = end_y;
    
            Answer = Run(x, y);
    
            if (Answer)
                printf("YES\n");
            else
                printf("NO\n");
    
            for (int i = 0; i <= N; i++)
            {
                stone[i].x = 0;
                stone[i].y = 0;
            }
        }
    
        return 0;   //  정상종료 시 반드시 0을 리턴해야 합니다.
    }
    

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