C ++:在给定以下文本输入的情况下查找有向图的程度

时间:2015-12-06 00:48:46

标签: c++ algorithm graph

我试图找到.txt文件中表示的相当大的图形(用于图形着色)的程度:

# Directed graph (each unordered pair of nodes is saved once): roadNet-PA.txt 
# Pennsylvania road network
# Nodes: 1088092 Edges: 3083796
# FromNodeId    ToNodeId
0   1
0   6309
0   6353
1   0
6353    0
6353    6354
6353    6364
6353    6386
6309    0
6309    6310
6309    6344
2   3
2   4
2   7
.   .
.   .
.   .
Etc.

每行代表连接第一个节点到第二个节点的边。 给出这些信息,确定每个顶点的程度的好方法是什么?答案不一定是在C ++中,伪代码就足够了:)

谢谢。

1 个答案:

答案 0 :(得分:0)

计算每个数字(节点)出现的次数。

void update_degree(std::map<int, int> &degree, int node) {
    if (degree.find(node) == degree.end()) {
        degree[node] = 1;
    } else {
        degree[node]++;
    }
}

std::map<int, int> get_degree(std::vector<std::pair<int, int> > edges) {
    std::map<int, int> degree;
    for (std::vector<std::pair<int, int> >::iterator it = edges.begin(); it != edges.end(); it++) {
        update_degree(degree, it->first);
        update_degree(degree, it->second);
    }
    return degree;
}