isvara   4년 전

우선 각 정점당 한번씩 만방문하도록하고 두번째에 방문한다면 cycle이 존재한다는 것이고 가장 큰 값 INF를 리턴시켜서 값을 구하도록 풀어봤습니다.

그리고 제출하니 런타임 에러가 나옵니다.

그리고 여러 질문을 보니까 DP를 쓰던데

애초에 중복으로 방문이 되는 경우는 무조건 싸이클이 있는 것이니 무한대로 움직일 수 있는거고  바로 종료가 될텐데

한번식만 방문해서 O(NM)으로 풀리지않나요?

그러니 굳이 DP로 처리안하고 풀어도 시간초과가 날 일이 있나요ㅜ?

이유점 설명해주십쇼  그리구 코드지적도 부탁드립니다.





djm03178   4년 전

런타임 에러는 43번째 줄 때문에 납니다. 객체의 배열은 함부로 memset과 같은 기초 메모리 함수를 사용해서 초기화를 하면 안 됩니다. 그 줄만 지우면 런타임 에러는 사라집니다.

그리고 이렇게 하면 안 되는 이유는, visited를 한 번 체크한 뒤 그 이후로 더 진행해서 원래 자리로 돌아오는 것이 아닌, 그보다 이전에 있던 칸에서 다른 경로를 통해 이 자리로 다시 돌아오는 경우도 있을 수 있고 이 때는 사이클이 아니기 때문입니다.

isvara   4년 전

감사합니다. 탐색을 하는 도중에 다른 정점에서 visited로 체크됐던 정점을 다시가는 경우가 있었군요 ㅜ

섣부르게 생각한것같습니다. ㅜ ㅜ dp로 다시풀어봐야겠어요

댓글을 작성하려면 로그인해야 합니다.