我正在與875713 nodes
和5105039 edges
一起工作。使用vector<bitset<875713>> vec(875713)
或array<bitset<875713>, 875713>
會引發段錯誤。我需要計算路徑恢復的全對最短路徑。我有什麼替代數據結構?如何存儲非常大的圖空間高效,但有快速索引?
我發現這個SO Thread但它不回答我的查詢。
編輯
我讀,似乎工作的建議後,嘗試這樣做。感謝大家幫助我。
vector<vector<uint>> neighboursOf; // An edge between i and j exists if
// neighboursOf[i] contains j
neighboursOf.resize(nodeCount);
while (input.good())
{
uint fromNodeId = 0;
uint toNodeId = 0;
getline(input, line);
// Skip comments in the input file
if (line.size() > 0 && line[0] == '#')
continue;
else
{
// Each line is of the format "<fromNodeId> [TAB] <toNodeId>"
sscanf(line.c_str(), "%d\t%d", &fromNodeId, &toNodeId);
// Store the edge
neighboursOf[fromNodeId].push_back(toNodeId);
}
}
嘗試'矢量 vec(875713)',或者甚至'矢量'。 –
2012-07-15 12:15:14
如果圖形密集,那麼鄰接矩陣就是一個非常緊湊的表示。 Wikipedias上的圖形文章有充足的理由選擇演示文稿 – fork0 2012-07-15 12:20:38
您似乎使用鄰接矩陣......並且它會很多:875713^2/8 ...〜90Gib。 – fork0 2012-07-15 12:25:36