拓扑排序
来源:互联网 发布:破解压缩文件密码软件 编辑:程序博客网 时间:2024/05/29 09:25
template<class EdgeType>
bool AdjGraph<EdgeType>::TopologySort(int SortArray[100])//对有向图进行拓扑排序,将序列存放在数组SortArray中
{
int n=vertexNum;
int *indegree=new int[n];//创建一个数组记录各个顶点的入度
int v;
for(v=0;v<n;v++)//各个顶点的入度初始化为0,访问状态标记为未访问
{
indegree[v]=0;
Mark[v]=0;
}
for(v=0;v<n;v++)//统计各个顶点的入度信息
{
for(int i=0;i<n;i++)
{
if(matrix[v][i]!=1000)
indegree[i]++;
}
}
for(int i=0;i<n;i++)//依次确定拓扑序列SortArray中的第i个元素,找到入度为0且未被访问的顶点
{
for(v=0;v<n;v++)
{
if(indegree[v]==0 && Mark[v]==0)
{
break;//退出for(v)循环
}
}
if(v==n)//找不到入度为0的顶点,退出拓扑排序
{
cout<<"有向图中存在环,该图没有拓扑排序"<<endl;
cout<<"环中的元素有:"<<endl;
for(int i=0;i<n;i++)
{
if(Mark[i]==0)
cout<<"点"<<i<<"在环中"<<endl;
}
return false;
}
Mark[v]=1;//将顶点v放到排序序列中,并将其状态设置为VISITED
SortArray[i]=v;
for(int i=0;i<n;i++)
{
if(matrix[v][i]!=1000)
indegree[i]--;
}
}
for(int i=0;i<n;i++)
{
cout<<"第"<<i<<"个点为"<<SortArray[i]<<endl;
}
delete []indegree;
return true;
}
bool AdjGraph<EdgeType>::TopologySort(int SortArray[100])//对有向图进行拓扑排序,将序列存放在数组SortArray中
{
int n=vertexNum;
int *indegree=new int[n];//创建一个数组记录各个顶点的入度
int v;
for(v=0;v<n;v++)//各个顶点的入度初始化为0,访问状态标记为未访问
{
indegree[v]=0;
Mark[v]=0;
}
for(v=0;v<n;v++)//统计各个顶点的入度信息
{
for(int i=0;i<n;i++)
{
if(matrix[v][i]!=1000)
indegree[i]++;
}
}
for(int i=0;i<n;i++)//依次确定拓扑序列SortArray中的第i个元素,找到入度为0且未被访问的顶点
{
for(v=0;v<n;v++)
{
if(indegree[v]==0 && Mark[v]==0)
{
break;//退出for(v)循环
}
}
if(v==n)//找不到入度为0的顶点,退出拓扑排序
{
cout<<"有向图中存在环,该图没有拓扑排序"<<endl;
cout<<"环中的元素有:"<<endl;
for(int i=0;i<n;i++)
{
if(Mark[i]==0)
cout<<"点"<<i<<"在环中"<<endl;
}
return false;
}
Mark[v]=1;//将顶点v放到排序序列中,并将其状态设置为VISITED
SortArray[i]=v;
for(int i=0;i<n;i++)
{
if(matrix[v][i]!=1000)
indegree[i]--;
}
}
for(int i=0;i<n;i++)
{
cout<<"第"<<i<<"个点为"<<SortArray[i]<<endl;
}
delete []indegree;
return true;
}
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 【拓扑排序】
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 关于啊asp.net的伪静态(url 重写、)
- Lucene
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
- [ linux ] ubuntu12.04 配置jdk!
- JAVA中堆、栈、常量池以及equal,==,hashcode的理解
- 拓扑排序
- 使用中断INT0和INT1来实现数码管显示以及清零
- 调光器
- 计算机网络概述
- 反射
- wp7工程目录含义介绍
- [ linux ] ubuntu12.04 安装mysql!
- 字符串IP和数字IP互转代码
- 生活中的PV操作