97번째 줄이 없어야 합니다.
1260번 - DFS와 BFS
system("pause");
지운 후에 다시 돌려도 여전히 오류가 납니다.
뭐가 문제점인지 짐작이 안갑니다. 다른 수정한 코드에서는 sort 이용한 후 제출했는 데도 여전히 틀림이네요.
아래 코드가 수정된 부분입니다.
pair* edges = new pair[m]; for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; edges[i] = pair(a, b); } sort(edges, edges + m, pair_compare); for (int i = 0; i < m; i++) { int first = edges[i].first; int second = edges[i].second; adj_node[first]->addNode(second); adj_node[second]->addNode(first); } dfs(start_node, dfs_visited, adj_node); cout << "\n"; bfs(start_node, bfs_visited, adj_node);
여기 반례 드리겠습니다. 위쪽 2개가 정답이고, 아래쪽 2개가 게시판에 올리신 코드가 출력하는 내용입니다. 사실 5개 다 똑같은 그래프에 시작점만 달라진건데..각각이 다 의미가 ㅣㅇㅆ을거같아서 걍 다 첨부했습니다.
...그리고...그리고... addNode에서 추가된
Node* n = new Node(index); 이 친구들을 delete 해주지 않아서 메모리누수가 생겨서 제 컴퓨터가 죽었습니다 -_-;;
이 문제를 푸는 것과는 직접적인 연관관계는 없지만
앞으로 프로그래밍을 계속 하실 예정이라면 이 부분도 신경쓰시길 바랍니다.아래 코드는 "소멸자"라는 녀석입니다.
~Node(){
if(next) {
delete next;
}
}
addNode 부분 해결했습니다. 저는 pair<int, int>를 sort해서 넣으면 별다른 문제가 생기지 않을 거라고 생각했는데 문제가 그렇게 호락호락 풀리지는 않았네요.
동적 할당 부분에 대해서 garbage collection을 해야한다고 생각은 하고 있었는데 저렇게 간단히 해결할 줄은 몰랐습니다;;
실례가 안된다면 c++ 관련해서 stackoverflow나 구글에서 다른 개발자 분들 보면 일반 포인터 말고 스마트 포인터를 사용하라고 하는 데, 이 문제에서도 스마트 포인터를 이용할 수 있을 까요? unique_ptr, weak_ptr 등 개념은 알고 있지만 정확히 언제 써야하는지는 통 감이 오지 않습니다.
댓글을 작성하려면 로그인해야 합니다.
papayetoo 4년 전
다른 질문에서의 반례들 모두 문제 없이 돌아가는 데 제 코드에 잘못된 점이나 통과 안되는 반례가 있는 지 알려주시면 감사하겠습니다.