typedef int VertexType;
typedef enum{
DG, UDG
}GraphType;
typedef struct ArcNode
{
int adjvex;
InfoPtr *info;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}VNode;
typedef struct
{
VNode vertex[MAX_VERTEX_NUM];
int vexnum, arcnum;
GraphType type;
}ListGraph;
int locate_vertex(ListGraph* G, VertexType v); //返回顶点 v 在vertex数组中的下标,如果v不存在,返回-1
bool insert_vertex(ListGraph *G, VertexType v);
bool insert_arc(ListGraph *G, VertexType v, VertexType w);
#include <stdio.h>
#include "graph.h" //请勿删除,否则检查不通过
bool insert_vertex(ListGraph* G, VertexType v)
{
if(locate_vertex(G,v)!=-1||G->vexnum+1>=MAX_VERTEX_NUM)return false;
G->vextex[G->vexnum].data=v;
G->vextex[G->vexnum].firstarc=NULL;
G->vexnum++;
return true;
}
bool insert_arc(ListGraph* G, VertexType v, VertexType w)
{
int a=locate_vertex(G,v);
int b=locate_vertex(G,w);
if(a!=-1||b!=-1)return false;
if(G->type=="DG"){
ArcNode* p=G->vertex[a].firstarc;
ArcNode* newnode=(ArcNode*)malloc(sizeof(struct ArcNode));
while(p!=NULL){
p=p->nextarc;
}p->nextarc=newnode;
newnode->nextarc=NULL;
newnode->adjvex=b;
G->arcnum++;
}
else{
ArcNode* p=G->vertex[a].firstarc;
ArcNode* newnode1=(ArcNode*)malloc(sizeof(struct ArcNode));
ArcNode* q=G->vertex[b].firstarc;
ArcNode* newnode2=(ArcNode*)malloc(sizeof(struct ArcNode));
while(p){p=p->nextarc;}
p->nextarc=newnode1;
newnode1->nextarc=NULL;
newnode1->adjvex=b;
while(q){q=q->nextarc;}
q->nextarc=newnode2;
newnode2->nextarc=NULL;
newnode2->adjvex=a;
G->arcnum+=2;
}
return true;
}
图 邻接矩阵
于 2022-04-28 17:37:42 首次发布