输出所有可能拓扑排序代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

-----武汉理工大学计算机学院数据机构课程设计----

-----题目:拓扑排序

-----姓名:

-----专业班级:计算机0909

-----学号:

----------------------说明---------------------

本程序使用C++语言编写,使用STL

测试运行平台为Visual Studio2010

栈数据结构使用stack模版生成,包含头文件

队列数据结构使用queue模版生成,包含头文件

源代码在Visual Studio2010上运行通过。

2011-07-01 ------------------------------------------------

*/

#define DEBUG//预编译调试标识

#include

#include

#include

using namespace std;

#define MAX_VERTEX_NUM20

#define InfoType int//InfoType

#define VertexType char//VertexType

typedef struct ArcNode{

int adjvex;

struct ArcNode*nextarc;

InfoType*info;//弧的相关信息

}ArcNode;

typedef struct VNode{

VertexType data;

ArcNode*firstarc;

bool isEx;//标识点是否删除

int indegree;//入度

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{

AdjList vertices;

int vexnum,arcnum;

int kind;

}ALGraph;

void CreatGraph(ALGraph&G)

{

int pos,k=0;//pos实际位置k计数头结点的第几条弧

ArcNode*p,*q;//出错原为ArcNode*p;

cout<<"请输入顶点数目:";cin>>G.vexnum;

cout<>G.arcnum;

cout<>G.kind;

for(int i=0;i<=G.vexnum-1;i++)

{

G.vertices[i].firstarc=NULL;//初始化为空,以便利于后续判断

G.vertices[i].isEx=true;//初始化点,标识点存在

G.vertices[i].indegree=0;//初始化点入度

k=0;//每一个顶点的弧数初始化为0

//p=G.vertices[i].firstarc;

cout<

cout<

cin>>G.vertices[i].data;

pos=0;//pos赋值使得可以进入while

while(pos>=0&&pos

{

cout<

cin>>pos;//输入实际位置

if(pos>=0&&pos

{

k++;//对弧数计数

p=new ArcNode;

p->nextarc=NULL;//初始化为空,以便利于后续判断

p->adjvex=pos;

if(k==1)

G.vertices[i].firstarc=p;//k==1表示头结点的第一条弧

if(k>1)

q->nextarc=p;//将后续弧连接到上一条弧的nexarc指针域

q=p;//存储弧

}//if

}//while

}//for

}//CreatGraph

void FindInDegree(ALGraph&G)

{

ArcNode*p;

for(int i=G.vexnum-1;i>=0;--i)

p=G.vertices[i].firstarc;

while(p!=NULL)//判断是否为空

{

G.vertices[p->adjvex].indegree++;

p=p->nextarc;

}//while

}//for

}

/*

//--------单一拓扑排序算法----------

int TopologicalSort(ALGraph G){

stackS;//初始栈S

for(int i=0;i

if(!G.vertices[i].indegree)S.push(i);

int count=0;

int temp,k;

while(!S.empty()){

temp=S.top();

S.pop();

cout<

++count;

for(ArcNode

*p=G.vertices[temp].firstarc;p;p=p->nextarc)

{

k=p->adjvex;

if(!(--G.vertices[k].indegree))S.push(k);

}//for

}//while

if(count

else return0;

}//TopologicalSort

*/

bool isdegree(ALGraph G)

{

#ifdef DEBUG

cout<<"进入isdegree()"<

#endif

for(int i=0;i

{

if(G.vertices[i].isEx&&G.vertices[i].indegree==0)return true;

相关文档
最新文档