数据结构-图-C语言-邻接表

数据结构-图-C语言-邻接表

#include <stdio.h>
#include <stdlib.h>

#define Max 100

typedef int Vertex;
typedef int WeightType;

typedef struct GNode *pGNode;
struct GNode {
	int nv;//结点
	int ne;//边
	AdjList g;
};
typedef pGNode LGraph;

/*边*/
typedef struct ENode *pENode;
struct ENode {
	Vertex v, w;//有向边v->w
	WeightType weight;//权重
};
typedef pENode Edge;

//链表的头结点
struct VNode {
	pAdjVNode firstEdge;
};
typedef VNode AdjList[Max];

//链表的边结点
typedef struct AdjVNode *pAdjVNode;
struct AdjVNode {
	Vertex adjV;
	WeightType weight;
	pAdjVNode next;
};

LGraph createLGraph(int vertexNum){
	LGraph graph;
	Vertex v, w;

	graph = (LGraph)malloc(sizeof(struct GNode));
	graph->nv = vertexNum;
	graph->ne = 0;
	
	for (v = 0; v < vertexNum; v++)
		graph->g[v].firstEdge = NULL;

	return graph;
}

void insertEdge(LGraph graph,Edge edge) {
	pAdjVNode newNode;
	newNode = (pAdjVNode)malloc(sizeof(struct AdjVNode));
	newNode->adjV = edge->w;
	newNode->weight = edge->weight;

	newNode->next = graph->g->firstEdge->next;
	graph->g->firstEdge->next = newNode;
}

LGraph buildLGraph() {
	LGraph graph;
	int vertexNum;
	scanf("%d", &vertexNum);

	graph = createLGraph(vertexNum);
	scanf("输入图的边数%d", &(graph->ne));//此处容易犯错!!!!!

	if (graph->ne != 0) {
		for (int i = 0; i < graph->ne; i++) {
			Edge edge = (Edge)malloc(sizeof(struct ENode));
			scanf("输入边的起始点%d", &edge->v);
			scanf("输入边的结束点%d", &edge->w);
			scanf("输入边的权重%d", &edge->weight);
			insertEdge(graph, edge);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40925226/article/details/83513863
今日推荐