1753번 - 최단경로
안녕하세요! 다익스트라 알고리즘으로 푸는 1753번 메모리 초과 질문 드립니다!
main에서 함수를 일일히 부르게 해서 visited와 dist 벡터를 일일히 만들어놨더니 메모리 초과 오류가 생기는 것 같더라고요,,,
dijkstra함수를 접속할 때마다 매번 visited와 dist 벡터를 생성해내지 않고,
c++의 stl vector 함수에서 vector visited와 dist를 매번 해당하는 false 와 INF로 초기화할 수 있는 함수 없을까요?(clear는 0으로 초과한다고 나와서 질문드립니다!)
아니면 iterator로 일일이 다 처리를 해야 할까요?
아니면 더 좋은 방법 있을까요?
감사합니다!!!!!!!!
이 문제는 다익스트라를 한 번만 돌려서 푸는 문제입니다.
한번으로 고쳤는데도 메모리 초과가 나네요....
가중치가 10이하라고 해서 바꿔도 메모리 초과.............가 나네요ㅠㅠ
제가 보기엔 W가 문제인 것 같습니다. 정점이 2만개이면 W의 크기가 최소 int 4억개고 그러면 대략 1.5GB의 메모리입니다. 인접 행렬 말고 인접리스트와 우선 순위 큐를 이용한 다익스트라 알고리즘을 구현해 보세요. 우선 순위 큐를 안 사용하는 방법도 있긴 합니다만 아무튼 인접행렬을 사용할 순 없습니다.
https://www.acmicpc.net/board/view/34516
FAQ입니다. 참고하세요.
댓글을 작성하려면 로그인해야 합니다.
js8662 3년 전
안녕하세요! 다익스트라 알고리즘으로 푸는 1753번 메모리 초과 질문 드립니다!
main에서 함수를 일일히 부르게 해서 visited와 dist 벡터를 일일히 만들어놨더니 메모리 초과 오류가 생기는 것 같더라고요,,,
dijkstra함수를 접속할 때마다 매번 visited와 dist 벡터를 생성해내지 않고,
c++의 stl vector 함수에서 vector visited와 dist를 매번 해당하는 false 와 INF로 초기화할 수 있는 함수 없을까요?(clear는 0으로 초과한다고 나와서 질문드립니다!)
아니면 iterator로 일일이 다 처리를 해야 할까요?
아니면 더 좋은 방법 있을까요?
감사합니다!!!!!!!!