C++ C++;:在给定以下文本输入的情况下,查找有向图的阶数

C++ C++;:在给定以下文本输入的情况下,查找有向图的阶数,c++,algorithm,graph,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

我试图找到在.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++,伪代码就足够了:


谢谢。

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

void update\u degree(标准::映射和degree,int节点){
if(degree.find(node)=degree.end()){
度[节点]=1;
}否则{
度[节点]+;
}
}
标准::映射获取度(标准::向量边){
映射度;
对于(std::vector::iterator it=edges.begin();it!=edges.end();it++){
更新_度(度,it->first);
更新学位(学位,it->second);
}
回归度;
}

欢迎来到堆栈溢出。请考虑修改你的问题,确保你提供一个让人们能够帮助你的问题。也要确保包括你自己对这个问题的尝试。
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;
}