#include \#include \#include \#include \
typedef enum {FALSE, TRUE} BOOLEAN; #define OVERFLOW -1 #define OK 1 #define ERROR 0
#define INFINITY INT_MAX /* 最大值∞ */ /* 根据图的权值类型,分别定义为最大整数或实数 */ #define MAX_VERTEX_NUM 20 /* 最大顶点数目 */ typedef enum {DG, DN, UDG,UDN} GraphKind ; /* {有向图,有向网,无向图,无向网} */
BOOLEAN Visited[MAX_VERTEX_NUM]; BOOLEAN visited[MAX_VERTEX_NUM];
#define VEX_NUM 20 #define MAXSIZE 50 typedef char Vextype; typedef int ElemType; typedef int Status;
////////////////////////////// 邻接矩阵结构定义 typedef struct {
Vextype vexs[VEX_NUM];
int adj[VEX_NUM][VEX_NUM]; /*邻接矩阵*/ int n,e; /*顶点数和边数*/
}Mgraph;
////////////////////////////// 邻接表结构定义
typedef struct node { /*边结点*/
int adjvex; /*邻接点域*/
struct node * nextarc; /*指向下一个边结点的指针域*/
} EdgeNode;
typedef struct vnode { //顶点结构,2个域,结点信息和第一个邻接点
Vextype vertex; EdgeNode *firstedge;
}VertexNode;
typedef struct { //图结构
VertexNode adjlist[MAXSIZE]; int n,e;
} ALGraph; ////
int FirstAdjVex(ALGraph G,int v)
{//在图G中寻找第v个顶点的第一个邻接顶点 if(!G.adjlist[v].firstedge) return -1; else return(G.adjlist[v].firstedge->adjvex); }
int NextAdjVex(ALGraph G,int v,int w)
{//在图G中寻找第v个顶点的相对于w的下一个邻接顶点 EdgeNode *p;
int vi;
p=G.adjlist[v].firstedge; if(!p) return -1;
while(p->adjvex!=w) p=p->nextarc; //在顶点v的弧链中找到顶点w
p=p->nextarc;
if(!p) return -1; //若已是最后一个顶点,返回-1 else {
vi=p->adjvex; } ////
void CreateMGraph(Mgraph *G) { int i,j,k; // char ch;
printf(\请输入顶点数和边数:\\n\
scanf(\输入*/ printf(\请输入顶点信息:\\n\ for (i=0;i
scanf(\ }
return vi; //返回下一个邻接顶点的序号
for (i=0;i
for (j=0;j
G->adj[i][j]=0; /*初始化邻接矩阵*/
printf(\输入每条边对应的两个顶点的序号:\\n\ for (k=0;k
scanf(\输入e条边*/ G->adj[i][j]=1;
G->adj[j][i]=1; /*对称加入,无向图的邻接矩阵存储建立*/
}
}/*CreateMGraph*/
void CreateALGraph(ALGraph *G) { /*建立无向图的邻接表存储*/
int i,j,k; char vi; EdgeNode *s;
printf(\请输入顶点数和边数:\\n\
scanf(\
printf(\请输入顶点信息Vi\\n例如a,每输入一个顶点后回车:\\n\
for (i=0;i
scanf(\G->adjlist[i].vertex=vi; G->adjlist[i].firstedge=NULL;
}
printf(\顶点:\
for (i=0;i
printf(\
printf(\请输入边的信息(vi,vj)\\n例如:1,2:\\n\for (k=0;k
scanf(\在头结点和边结点之间插入新的边结点 s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=j-1; s->nextarc=G->adjlist[i-1].firstedge; G->adjlist[i-1].firstedge=s;
s=(EdgeNode*)malloc(sizeof(EdgeNode));

