图拓扑排序问题
#include "stdlib.h"
#include "stdio.h"
#include "malloc.h"
#define MAXSIZE 20
#define NULL 0
#define ERROR 0
#define OK 1
#define STACK_INIT_SIZE 100
#define OVERFLOW -1
#define STACKINCREMENT 20
#define MAX_VERTEX_NUM 20
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
int data ;
struct ArcNode * firstarc;
int indegree;
}VNode ,AdjList[MAX_VERTEX_NUM ];
typedef struct
{
AdjList vertice;
int vexnum,arcnum;
}Graph;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
int indegree[MAX_VERTEX_NUM];
int initstack(SqStack *s)
{
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s->base)exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
int Push(SqStack *s,int e)
{if(s->top-s->base>=s->stacksize)
{s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*s->top++=e;
return OK;}
int Pop(SqStack *s,int *e)
{
if(s->base==s->top)return ERROR;
*e=*--s->top;
return OK;
}
int GetTop(SqStack s,int *e)
{if(s.base==s.top)return ERROR;
*e=*(s.top--);
return OK;
}
int StackEmpty(SqStack *s )
{if(s->base==s->top)return OK;
else
return ERROR;
}
void CreateGraph(Graph *g)
{
ArcNode *q;
int i,k,x,y;
printf("input graph vexnum and arcnum:");
scanf("%d,%d",&(g->vexnum),&(g->arcnum));
getchar();
for(i=0;i <g->vexnum;i++)
{
printf("Please input the name of Node:");
scanf("%d",&(g->vertice[i].data));
getchar();
g->vertice[i].firstarc=NULL;
/*printf("data is:%c",g->vertice[i].data);*/
}
/*getch(); */
for(k=0;k <g->arcnum;k++)
{
printf("Please input beginNode and EndNode :");
scanf("%d %d",&x,&y);
getchar();
q=(ArcNode *)malloc(sizeof(ArcNode));
q->adjvex=y;
q->nextarc=g->vertice[x].firstarc;/*qianchafa*/
g->vertice[x].firstarc=q;
}
/*getch();*/
}
void FindInDegree(Graph G)
{ int i,id;
ArcNode *p;
for(i=0;i <G.vexnum;i++)
{
indegree[i]=0;
for( id=0;id <G.vexnum;id++)
{
p=G.vertice[id].firstarc;
while(p)
{
if(p->adjvex==(i+1))
indegree[i]++;
p=p->nextarc;
}
}
}
}
int TopSort(Graph g)
{
int i,k,count;
ArcNode *p;
SqStack s;
initstack(&s);
FindInDegree(g);
for(i=0;i <g.vexnum;++i)
{
if(indegree[i]==0)
Push(&s,i);
}
count=0;
while(!StackEmpty(&s))
{
Pop(&s,&i);
printf("%d,%d",&i,&(g.vertice[i].data));
++count;
for(p=g.vertice[i].firstarc;p;p=p->nextarc)
{
k=p->adjvex;
if(!(--indegree[k]))
Push(&s,k);
}
}
if(count <g.vexnum)
return ERROR;
else
return OK;
}
main()
{
Graph g;
clrscr();
CreateGraph(&g);
printf("\n");
TopSort(g);
}
为什么运行的时候出来的是随机数
不是全序序列?能不能帮看一下,谢啦哦