//图的拓扑排序算法
/*邻接表存储结构*/
typedef struct ArcNode{
int adjvex;//该边所指结点编号
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
char data;//顶点信息
int count;//顶点的度数
ArcNode *firstarc;
}VNode;
typedef struct AGraph{
VNode *adjlist[maxsize];//邻接表
int n,e;//顶点数和边数
}AGraph;
/*算法思想:
step1:在图中选择一个入度为0的顶点输出
step2:删除刚输出的顶点,并删除从该顶点出发的所有边
step3:直到图中不存在入度为0的顶点为止*/
int Topsort(AGraph *G){
int i,j,k=0;
int stack[maxsize],top=-1;
ArcNode *p;
for(i=0;i<G.n;i++){//先将图中入度已为0的顶点入栈
if(G->adjlist[i].count==0)
stack[++p]=i;
}
while(p!=-1){
i=stack[top--];
++k;//统计入度为零的顶点个数
p=G->adjlist[i].firstarc;
while(p!=NULL){
j=p->adjvex;
--(G->adjlist[j].count);
if(G->adjlist[j].count==0)
stack[++top]=j;
p=p->nextarc;
}
}
if(k==G.n)
return 1;
else
return 0;
}
图相关算法
最新推荐文章于 2024-09-09 23:35:47 发布
282

被折叠的 条评论
为什么被折叠?



