图的创建——邻接表法

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的创建——邻接表法相关的知识,希望对你有一定的参考价值。

顶点表 + 边表    // 前者是数组,后者是单链表

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

const int VERTEX_NUM = 20;			// 最大允许的顶点数 

// 边表的结点(单链表) 
class EdgeNode {
public:
	int vertexData;
	int weight;
	EdgeNode *next;
}; 

// 顶点表的结点 
class VertexNode {
public:
	int vertexData;
	EdgeNode *firstEdge;
};

// 图的结构 
class Graph {
public:
	VertexNode vertex[VERTEX_NUM];		
	int vertexNum;			// 当前图的顶点数 
	int edgeNum;			// 当前图的边数 
};

void createGraph(Graph &G)
{
	cout << "请输入无向图的顶点数和边数:";
	cin >> G.vertexNum >> G.edgeNum;
	// 读入顶点信息,建立顶点表 
	for (int i = 0; i != G.vertexNum; ++i) {
		cout << "请输入第" << i + 1 << "个顶点的序号:";
		cin >> G.vertex[i].vertexData;
		G.vertex[i].firstEdge = NULL;		// 将边表置位空表 
	}
	// 建立边表 
	for (int k = 0; k != G.edgeNum; ++k) {
		cout << "请输入边(vi, vj)的顶点i、j及权重w:";
		int i, j, w;
		cin >> i >> j >> w;
		EdgeNode *q = (EdgeNode*)malloc(sizeof(EdgeNode));		// 生成边表结点,下同单链表的头插入 
		q->vertexData = j;
		q->weight = w;
		q->next = G.vertex[i].firstEdge;
		G.vertex[i].firstEdge = q;
		// 无向图要再设置另一半 
		EdgeNode *s = (EdgeNode*)malloc(sizeof(EdgeNode));		// 生成边表结点 
		s->vertexData = i;
		s->weight = w;
		s->next = G.vertex[j].firstEdge;
		G.vertex[j].firstEdge = s;
	}
}

int main()
{
	Graph G;
	createGraph(G);
}

  

以上是关于图的创建——邻接表法的主要内容,如果未能解决你的问题,请参考以下文章

图的存储表示及示例

数据结构与算法图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )

用c语言编程 1创建图的邻接矩阵和邻接表 2验证图的深度优先、广度优先遍历算法 3验证最短路径

算法笔记图结构及图的 DFS 和 BFS 介绍

求算法,用邻接矩阵和邻接表创建一个图,实现深度和广度搜索,菜单形式,c语言的代码。无向无权的图。

数据结构(二十九)图的邻接矩阵存储结构