ian981130s   3년 전

BFS를 이용해 문제를 풀려했습니다.

그래프는 인접리스트를 이용해 표현하였고, BFS를 위한 큐는 링크드리스트를 이용해 구현했습니다.

예제들의 경우 맞게 나오는데, 계속해서 12%까지 채점 후 시간초과가 나옵니다.

어느부분에서 시간복잡도를 줄일 수 있는지 고수님들의 조언 부탁드립니다.


dtc03012   3년 전

왜 모든 정점에서 다 돌리는거에요? 한 정점에서만 돌아도 되지 않나요? 그렇게 짜면 V*V*E 아닌가?

dtc03012   3년 전

아니 V*(V+E) 요

ian981130s   3년 전

그래프가 연결그래프라는 보장이 없어서 모든 노드에 대해 탐색했습니다!!

혹시 하나의 노드에 대해서만 돌려도 이상이 없을까요??

dtc03012   3년 전

그럼 방문하지 않은 정점에서만 돌려주면 될거에요

ian981130s   3년 전

dtc03012님 말대로 IsVisit[] 를 추가해서 방문했는지 확인해서 방문하지 않는 노드만 탐색하는걸로 했는데도 시간초과가 나네요...

혹시 다른 방법이 있을까요...??

dtc03012   3년 전

164 ~ 165 번째 줄에 2만을 돌려서 V*20000이 되서 시간초과가 나는 것 같네요 코드가 너무길어서 다 읽지를 못하겠는데 BFSVisit 를 왜 초기화 시켜주는 거에요? 어차피 그 다음에 방문할 노드는 isvisited 에 체크가 안된 노드기 때문에 BFSVisit 는 초기화된 값이여서 저 164~165 줄이 필요가 없을것같은데..

ian981130s   3년 전

그러네요..!!

그런데 말씀대로 아래 코드를 돌려보니 예제들은 맞게 나오는데 역시 시간초과가 뜨네요...

혹시 BFS()함수에서 시간복잡도가 너무 많이 나오는게 아닐까요..??

dtc03012   3년 전

75 ~ 76 줄에서 넣을때마다 모든 인접리스트 다 돌기때문에 E*E 가 될 것 같네요 tail 배열 하나 만들어서 tail 끝에다가 추가하는 식으로 하면 추가할 때 O(1) 일거에요

ian981130s   3년 전

아 이제 시간초과는 뜨지 않네요..!!(대신 틀렸다고는 뜨지만..ㅠㅠ)

이부분은 제가 더 고민해보겠습니다.

답변 정말 감사드립니다!!

ian981130s   3년 전

허허 마지막 출력에 No->NO로 바꾸니 맞네요....

다시한번 답변 남겨주셔서 감사합니다.

dtc03012   3년 전

열공하세요 ㅎㅎ

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