拓扑算法算法的现.docxVIP

  • 3
  • 0
  • 约2.76千字
  • 约 5页
  • 2019-05-30 发布于江苏
  • 举报
韩山师范学院 实验题目: 拓扑排序算法实现 班级:2015级软工班 作者:黄俊聪 #includeiostream using namespace std; #define MVNum 100//最大顶点数 #define OK 1 #define ERROR 0 typedef int Status; typedef string VerTexType; typedef int OtherInfo; typedef struct ArcNode//边结点 { int adjvex;//该边所指向的顶点的位置 struct ArcNode* nextarc;//指向下一条边的指针 OtherInfo info;//和边相关的信息 }ArcNode; typedef struct VNode//顶点信息 { VerTexType data; ArcNode* firstarc;//指向第一条依附该顶点的边的指针 }VNode,AdjList[MVNum];//Adjlist表示邻接表类型 typedef struct { AdjList vertices; int vexnum,arcnum;//图的当前顶点数 }ALGraph; typedef struct StackNode { int data; struct StackNode* next; }StackNode,*LinkStack; Status InitStack(LinkStack S) { S=NULL; return OK; } Status Push(LinkStack S,int e) { LinkStack p; p=new StackNode; p-data=e; p-next=S; S=p; return OK; } Status Pop(LinkStack S,int e) { LinkStack p; p=new StackNode; if(S==NULL) return ERROR; e=S-data; p=S; S=S-next; delete p; return OK; } Status StackEmpty(LinkStack S) { if(S==NULL) return OK; else return ERROR; } Status LocateVex(ALGraph G,string v) { int i; for(int i=0;iG.vexnum;i++) if(G.vertices[i].data==v) return i; return ERROR; } Status CreateUDG(ALGraph G) { ArcNode* p1,*p2; string v1,v2; int i,j; cout输入总顶点数和总边数:endl; cinG.vexnumG.arcnum;//输入总顶点数和总边数 cout输入各点,构造表头结点表:endl; for(int i=0;iG.vexnum;i++) { cinG.vertices[i].data;//输入顶点值 G.vertices[i].firstarc=NULL;//初始化表头结点的指针域为NULL } cout输入各边,构造邻接表:endl; for(int k=0;kG.arcnum;k++)//输入各边,构造邻接表 { cinv1v2;//输入一条边依附的两个顶点 i=LocateVex(G,v1); j=LocateVex(G,v2);//确定v1和v2在G中的位置,即顶点在G.vertices中的序号 p1=new ArcNode;//生成一个新的边结点*p1 p1-adjvex=j;//邻接点序号为j p1-nextarc=G.vertices[i].firstarc; G.vertices[i].firstarc=p1;//将新结点*p1插入顶点v1的边表头部 } return OK; } Status FindInDegree(ALGraph G,int indegree[]) { ArcNode* p; for(int i=0;iG.vexnum;i++)/*入度赋初值0*/ indegree[i]=0; for(int i=0;iG.vexnum;i++) for(p=G.vertices[i].firstarc;p!=NULL;p=p-n

文档评论(0)

1亿VIP精品文档

相关文档