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을 리턴해야 합니다.
}
10년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
tkdi000
10년 전