C++ C++;:在给定以下文本输入的情况下,查找有向图的阶数
我试图找到在.txt文件中表示的相当大的图形(用于图形着色)的程度,如下所示: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
# 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> °ree, 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;
}