C++ 在图中查找入度为零的节点
C++ Find a node with zero in-degree in graph
>我用map实现了一个图
map<char,vector<char> > M;
现在,我一个接一个地获得边缘,并将它们推入这样的图形中
addEdge(char a,char b){
M[a].push_back(b);
}
我想找到度数为零的所有节点。最有效的方法是什么?
创建一个将存储最终节点的vector<char> L
。
- 启动它以包含所有节点。
- 对于每个边 (a,b(:如果 b 在
L
中,请将其从L
中删除。
在
由仅包含边的数据结构表示的图形中,不能有零度的节点。因此,如果你的图完全由 M[] 描述,则保证没有零次节点。
我认为
如果我们采用另一个映射"indegree",如下面的代码所示,并增加计数,如果字符显示为边缘的终止端,那么我们可以找到 indegree 0 的节点。
map<char,vector<char> > M;
map<char,int> indegree;
void addEdge(char a,char b){
M[a].push_back(b);
indegree[b]++;
}
void show(){
for(map<char,vecotr<char> > :: iterator it=M.begin();it!=M.end();it++){
if(indegree[it->first]==0)
cout<<it->first<<endl;
}
}
另一种方法是预定义大小为 256 的数组,并遵循与上述相同的过程。
map<char,vector<char> > M;
int arr[256]={0};
void addEdge(char a,char b){
M[a].push_back(b);
arr[b]++;
}
void show(){
for(map<char,vecotr<char> > :: iterator it=M.begin();it!=M.end();it++){
if(arr[it->first]==0)
cout<<it->first<<endl;
}
}
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 函数复杂度分析
- C++将浮点指针值舍入为小数位数
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 当我将字符串放入节点>名称时,为什么会出现分段错误(核心转储)?
- 创建随机邻接矩阵,每个节点具有最小'k'度
- 将节点按顺序放入链表中
- 计算 BST 节点移除的时间复杂度
- 我的程序在将节点读入链表后不断循环,只重复显示一个节点
- C++ 在图中查找入度为零的节点
- 如果对象没有默认构造函数,并且不允许在其类定义中创建一个,那么如何将对象放入节点中?
- 计算图中节点的出界度
- 防止头节点被推入链表