c语言 拓补排序源代码,拓扑排序C语言代码
#include
#include
#include
#include
//----------------公共的-----------------
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//---------------------------------------
//*************棧的初始大小和增量***************
#define STACK_INIT_SIZE 100
#define STATCKINCREMENT 10
//**********************************************
//*************棧的元素類型***************
typedef int SElemType;
typedef struct SqStack
{
SElemType *base;
SElemType *top;
SElemType stacksize;
}SqStack;
//****************************************
#define MAX_VERTEX_NUM 20
#define MAX 20
typedef int Boolean;
typedef int Status;
typedef char InfoType;
typedef struct ArcNode{ //鄰接表的弧
int adjvex; //該弧所指向的頂點的位置
InfoType *info; //該弧相關信息的指針(如:權值等)
struct ArcNode *nextarc; //指向下一條弧的指針
}ArcNode;
typedef int VertexType;//每個頂點的值的類型
typedef struct VNode//鄰接表的頂點
{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices; //鄰接表
int vexnum,arcnum;//圖的當前頂點數和弧數
int kind; //圖的種類標志 0為無向圖 1為有向圖
}ALGraph;
//****************棧的使用函數*********************
int InitStack(SqStack &s){//棧的初始化
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return 0; //存儲分配失敗
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &s,SElemType e){ //元素的入棧
if(s.top-s.base>=s.stacksize)//棧滿,追加存儲控件
{
s.base=(SElemType *)realloc(s.base,(s.stacksize+STATCKINCREMENT)*sizeof(SElemType));
if(!s.base) return 0;//存儲分配失敗
s.top=s.base+s.stacksize;
s.stacksize+=STATCKINCREMENT;
}
*(s.top)++=e;
return 1;
}
int Pop(SqStack &s,SElemType &e){//元素的出棧
if(s.top==s.base) return 0;
e=*--s.top;
return 1;
}
int StackEmpty(SqStack s){//若S為為空戰,則返回1,否則返回0
if(s.top==s.base) return 1;
else return 0;
}
//*************************************************
Status CreateDG(ALGraph &g){ /* 鄰接表建立有向圖 */
int i,j,k;
ArcNode *p;
printf("請輸入頂點數和邊數(格式為:頂點數,邊數):");
scanf("%d,%d",&i,&j);
getchar();
g.vexnum=i;g.arcnum=j;
for(i=1;i<=g.vexnum;i++)//輸入頂點
{
printf("請輸入第%d個頂點的值:",i);
scanf("%d",&g.vertices[i].data);
getchar();
g.vertices[i].firstarc=NULL;
}
printf("輸入邊的信息(輸入格式為:i,j)\n");
for(i=1;i<=g.arcnum;i++) /* 輸入弧的信息 */
{
printf("請輸入第%d條邊的信息:",i);
scanf("%d,%d",&j,&k);
getchar();
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=k;
p->nextarc=g.
總結
以上是生活随笔為你收集整理的c语言 拓补排序源代码,拓扑排序C语言代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BT学习相关网址
- 下一篇: project2016资源管理