资源简介

数据结构,使用C语言编写的求关键路径的源代码

资源截图

代码片段和文件信息

#include 
#include 
#include 
using namespace std;

#define MAX_VERTEX_NUM 20  //顶点的最大数
#define INIT_SIZE 100      //堆栈的初始化大小
#define INCREMENT 10       //堆栈的增量
#define OK 1
#define ERROR -1

//堆栈的存储结构
typedef struct{int *top;int *base;int stacksize;}Stack;

//弧结点
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
int info;
}ArcNode*ArcPtr;

//顶点结点
typedef struct VNode{
char data;
ArcNode *firstarc;

}VNodeAdjList[MAX_VERTEX_NUM];

//图的存储结构
typedef struct{
AdjList vertices;
int vexnumarcnum;
}ALGraph;

int adjvex[MAX_VERTEX_NUM][MAX_VERTEX_NUM]={0};//各顶点的邻接顶点

//确定顶点在图中的位置
int LocateVex(ALGraph Gchar ch)
{
for(int i=0;i if(ch==G.vertices[i].data) return i;
return -1;
}

//创建图
void CreateGraph(ALGraph &G)
{
ArcNode *p;
char v1v2;int *jinfo;
int mn;
for(m=0;m for(n=0;n adjvex[m][n]=-1;
cout<<“Enter the number of vertices and arcs:\n“;
cin>>G.vexnum>>G.arcnum;
j=new int[G.vexnum];
cout<<“Enter the vertices:\n“;
for(int i=0;i {
cin>>G.vertices[i].data; 
G.vertices[i].firstarc=NULL;
j[i]=0;
}
for(int k=0;k {
p=new ArcNode;
cout<<“Enter the arcs:\n“;
cin>>v1>>v2>>info;
m=LocateVex(Gv1);n=LocateVex(Gv2);
adjvex[m][j[m]++]=n;
p->adjvex=n;
p->info=info;
p->nextarc=G.vertices[m].firstarc;
G.vertices[m].firstarc=p;
}
}

//输出邻接表
void PrintTable(ALGraph G)
{
ArcNode *p;
cout<<“\n邻接表:\n\n“;
for(int i=0;i {
cout<“;
p=G.vertices[i].firstarc;
while(p)
{
cout<adjvex<<“-“<info<<“-->“;
p=p->nextarc;
}
cout<<“NULL“< }
cout<}

//深度优先遍历图========================================================
//第v个达顶点的第一个邻接顶点
int FirstAdjVex(ALGraph Gint v)
{
int w;
w=adjvex[v][0];
return w;
}

int pos(int a[][MAX_VERTEX_NUM]int vint w)
{
int j;
for(j=0;j {
if(a[v][j]==w)
return j;
}
return -1;
}

//第v个顶点的下一个邻接顶点
int NextAdjVex(ALGraph Gint vint w)
{
int n=pos(adjvexvw);
return adjvex[v][n+1];
}

//*************************建立堆栈相关的函数*************************
void InitStack(Stack &S)
{
S

评论

共有 条评论