时间:2021-05-19
复制代码 代码如下:
#include<iostream>
#include<list>
#include<stack>
using namespace std;
class Graph {
int vertexNum;
list<int> *adjacents;
public:
Graph(int _vertexNum) {
vertexNum = _vertexNum;
adjacents = new list<int>[vertexNum];
}
void findIndegree(int *indegree, int n);
bool topologicalSort();
void addEdge(int v, int w);
};
void Graph::addEdge(int v, int w) {
adjacents[v].push_back(w);
}
void Graph::findIndegree(int *indegree, int n) {
int v;
list<int>::iterator iter;
for(v = 0; v < vertexNum; v++) {
for (iter = adjacents[v].begin(); iter != adjacents[v].end(); iter++)
indegree[*iter]++;
}
}
bool Graph::topologicalSort() {
int ver_count = 0;
stack<int> m_stack;
int *indegree = new int[vertexNum];
memset(indegree, 0, sizeof(int) * vertexNum);
findIndegree(indegree, vertexNum);
int v;
for (v = 0; v < vertexNum; v++)
if (0 == indegree[v])
m_stack.push(v);
while (!m_stack.empty()) {
v = m_stack.top();
m_stack.pop();
cout << v << " ";
ver_count++;
for (list<int>::iterator iter = adjacents[v].begin(); iter != adjacents[v].end(); iter++) {
if (0 == --indegree[*iter])
m_stack.push(*iter);
}
}
cout << endl;
if (ver_count < vertexNum)
return false;
return true;
}
int main(int argc, char *argv[]) {
Graph g(6);
g.addEdge(5, 2);
g.addEdge(5, 0);
g.addEdge(4, 0);
g.addEdge(4, 1);
g.addEdge(2, 3);
g.addEdge(3, 1);
if (g.topologicalSort())
cout << "it is a topological graph" << endl;
else
cout << "it is not a topological graph" << endl;
cin.get();
return 0;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
无向图的连通性判断一个无向图是否为连通图。输入为无向图的邻接矩阵。输入输入有若干行第一行为正整数N(0
暂时是一个手动设置无向图中的边,用一个二维数组表示,后面会改进为用户自己定义无向图的边。学习python的新手,若大佬有解决的办法,希望不吝赐教#无向图判断环是
本文实例为大家分享了C++有向图的邻接表表示,供大家参考,具体内容如下一、思路:有向图的插入有向边、删除边、删除顶点和无向图的有区别。其他的和无向图的类似。1.
C语言数据结构之图的遍历实例详解输入一组顶点,建立无向图的邻接矩阵。输入一组顶点,建立有向图的邻接表。分别对无向图和有向图进行DFS(深度优先遍历)和BFS(广
本程序将使用字典来构建有向无环图,然后遍历图将其转换为对应的Excel文件最终结果如下:代码:(py3)[root@7-o-1py-dag]#cattest.p