拓扑排序,使用邻接表来存储图
2010-02-02 20:25
204 查看
void toposort()
{//
int s[n0+1]; //存储入度为0的节点的栈
int t; //栈点指针
int i; //仅仅是Index
int j;
arcnode* p; //
for(i=1;i<=n;i++)
{
if(adjlist[i].degree == 0)
{//如果i节点的入度为0
s[++t] = i;//入栈
}
}//得到了所有入度为0的节点
while(t)
{//当入度为0的节点栈不为空
i=s[t--];//出栈
cout<<i<<","; //就是topo序列的输出
p = adjlist[i].first;//得到i邻接的第一个节点
//下面是把所有i邻接的节点的入度都减1
while(p)
{//如果这个边存在
j = p->vertext;
adjlist[j].degree--;
if(adjlist[j].degree == 0)
{//如果这个节点的入度也为0了,也入栈
s[++t] = j;
}
p = p->next;
}
}
}
{//
int s[n0+1]; //存储入度为0的节点的栈
int t; //栈点指针
int i; //仅仅是Index
int j;
arcnode* p; //
for(i=1;i<=n;i++)
{
if(adjlist[i].degree == 0)
{//如果i节点的入度为0
s[++t] = i;//入栈
}
}//得到了所有入度为0的节点
while(t)
{//当入度为0的节点栈不为空
i=s[t--];//出栈
cout<<i<<","; //就是topo序列的输出
p = adjlist[i].first;//得到i邻接的第一个节点
//下面是把所有i邻接的节点的入度都减1
while(p)
{//如果这个边存在
j = p->vertext;
adjlist[j].degree--;
if(adjlist[j].degree == 0)
{//如果这个节点的入度也为0了,也入栈
s[++t] = j;
}
p = p->next;
}
}
}
相关文章推荐
- 【算法导论】邻接表存储的拓扑排序
- STL_稀疏图,树_使用vector邻接表存储
- STL_稀疏图,树_使用vector邻接表存储
- 邻接表存储的拓扑排序
- 图之拓扑排序(邻接表存储)
- 十一、图的存储---(4)邻接表的构造和使用
- 图的遍历--使用邻接表作为存储结构的遍历(DFS、BFS)C语言
- 使用数组来模拟邻接表存储图信息
- 队列优化并使用邻接表存储的Bellman-Ford算法模板解决最短路径存在负权边问题
- 使用邻接表存储有向图模板
- 【算法导论】邻接表存储的拓扑排序
- STL_稀疏图,树_使用vector邻接表存储
- 图的邻接表存储及其遍历(使用模板)
- 使用数组存储邻接表
- SQL SERVER 使用存储过程创建、删除用户定义数据类型
- Android学习笔记34-使用文件存储数据
- (十)android 中数据存储与访问——使用SharedPreferences保存数据
- 在NHibernate中不能够使用带有out 参数的存储过程
- mysql存储过程中两个CURSOR嵌套使用遇到的有关问题
- 【第一弹】探索矩阵转换、透视投影、OpenGL矩阵存储及操作特性、法线的应用以及GLFrame的使用