sjnam07   5년 전

아래 코드를 올리면 메모리초과가 나옵니다. Edge와 Vertex를 최대치로 한 여러 케이스를 돌려도 최대 28MB만 나오는데, 어디서 잘못된지 모르겠네요ㅜ

도움 부탁 드립니다.

hyunynim   5년 전

질문 올리시기 전에 질문 게시판 공지사항을 한번 보시는게 좋을 듯 합니다.

어떤 의도로 vector안에 다시 list<pair>를 넣어놓으신 건지는 모르곘지만

인접 리스트를 사용할 때 vector 또는 list를 사용합니다.

sjnam07   5년 전

특정 정점에 대해 인접한 간선의 정보를 pair<가중치, 연결된 정점>의 list로 표현 한 것입니다.

위 인접리스트를 해당하는 정점에 넣어놓기 위해 vector를 사용한 것이고요.

이 때 공간은 V + E 정도만 차지할 것이고, 최대 정점 20000개 + 간선 300000개를 저장할 공간만 차지하니 128MB가 초과하지 않을 것 같은데요.

혹시 이것에 대해 오류가 있는지요? 뭔가 틀렸으니 답이 안맞는 것일텐데, 도통 찾아지질 않네요. 오류가 있다면 알려주시면 감사하겠습니다.

ybnormal81   5년 전

void Dijkstra(int start) {

priority_queue< distPair, vector, greater > q;
bitset<_MAX_E> visited;

m_MinTable[start] = 0;
q.push(distPair(0, start));

while (!q.empty()) {
int point = GetPoint(q.top());
int dist = GetDist(q.top());
q.pop();


for (auto &edge : m_AdjList[point]) {
int d = GetDist(edge);
int p = GetPoint(edge);

int newVal = d + dist;
if (newVal < m_MinTable[p]) {
m_MinTable[p] = newVal;
q.push(distPair(m_MinTable[p], p));
}

}
}
}
};


sjnam07   5년 전

어디선가 무한루프 돌아서 큐에 비지못하고 쌓아만 지는 경우가 생기는가 봅니다.ㅠㅠ

답변 감사합니다!

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