GeeksforGeeks - Adjacency List邻接矩阵C\C++代码
来源:互联网 发布:ad电路设计软件怎么样 编辑:程序博客网 时间:2024/05/18 03:44
邻接矩阵的图示:
构建一个这样的无向邻接矩阵。
参考网站: http://www.geeksforgeeks.org/graph-and-its-representations/
这里写了个类,增加删除图的操作。
#pragma once#include <stdio.h>#include <stdlib.h>class AdjListGraph{struct Node{int dest;Node *next;};struct List{Node *first;};struct Graph{int vers;List *verArr;};Node *createNode(int dest){Node *newNode = (Node *) malloc(sizeof(Node));newNode->dest = dest;newNode->next = nullptr;return newNode;}Graph *createGraph(int vers){Graph * gra = (Graph *) malloc(sizeof(Graph));gra->vers = vers;gra->verArr = (List *) malloc(vers * sizeof(List));for (int i = 0; i < vers; i++){gra->verArr[i].first = nullptr;}return gra;}void addEdge(Graph *gra, int src, int dest){Node *n = createNode(dest);n->next = gra->verArr[src].first;//这里不需要->next,因为无空head指针gra->verArr[src].first = n;//构造无向图n = createNode(src);n->next = gra->verArr[dest].first;gra->verArr[dest].first = n;}void printGraph(){for (int i = 0; i < graph->vers; i++){Node *n = graph->verArr[i].first;printf("\n Adjacency list of vertex %d\n head ", i);while (n){printf("-> %d", n->dest);n = n->next;}putchar('\n');}}Graph *graph;public:AdjListGraph(int V = 0) : graph(nullptr){graph = createGraph(V);addEdge(graph, 0, 1);addEdge(graph, 0, 4);addEdge(graph, 1, 2);addEdge(graph, 1, 3);addEdge(graph, 1, 4);addEdge(graph, 2, 3);addEdge(graph, 3, 4);printGraph();}~AdjListGraph(){if (graph){for (int i = 0; i < graph->vers; i++){Node *n = graph->verArr[i].first;Node *p = nullptr;while (n){p = n;n = n->next;free(p);}}free(graph->verArr);free(graph);}}};
下面是C++的代码,C++的代码会更加简洁。
使用默认构造函数和使用new的确会方便很多。
malloc原始快捷,new方便。不用专门设置一个create函数,直接new+构造函数就实现了。
#include <stdio.h>#include <stdlib.h>#include <iostream>class AdjListGraph_2{struct Node{int label;Node *next;Node(int l = 0, Node *n = nullptr) : label(l), next(n){}};struct Vertice{Node *first;Vertice() : first(nullptr) {}};struct Graph{int vers;Vertice *vArr;Graph(int v = 5) : vers(v){vArr = new Vertice[vers];}};Graph *graph;public:AdjListGraph_2(int V = 5) : graph(nullptr){graph = new Graph(V);addEdge(0, 1);addEdge(0, 4);addEdge(1, 2);addEdge(1, 3);addEdge(1, 4);addEdge(2, 3);addEdge(3, 4);printGraph();}void addEdge(int src, int dest){Node *n = new Node(dest);n->next = graph->vArr[src].first;graph->vArr[src].first = n;n = new Node(src);n->next = graph->vArr[dest].first;graph->vArr[dest].first = n;}void printGraph(){if (graph){for (int i = 0; i < graph->vers; i++){Node *n = graph->vArr[i].first;printf("\n The %d vertice's adjcences are :\n V%d", i, i);while (n){printf(" ->V%d", n->label);n = n->next;}putchar('\n');}}}~AdjListGraph_2(){if (graph){for (int i = 0; i < graph->vers; i++){Node *n = graph->vArr[i].first;while (n){Node *p = n;n = n->next;delete p;}}delete [] graph->vArr;delete graph;}}};
2 0
- GeeksforGeeks - Adjacency List邻接矩阵C\C++代码
- 邻接矩阵(Adjacency Matrix)
- 邻接矩阵(Adjacency Matrix)
- Adjacency List Dijkstra
- C语言实现邻接矩阵
- Adjacency Matrix of Graph(图的邻接矩阵)
- [C++] Linking List 范例代码
- Graph Theory Adjacency List.解释
- 01邻接矩阵创建_CreateMGraph.c
- C语言邻接矩阵的实现
- C/C++: 邻接矩阵 深度优先搜索
- skip list跳表C语言代码。
- 【Unity】【C#】【Code】List示例代码
- 数据结构(C语言版)规范代码之图(邻接矩阵与邻接表)
- 【c/c++ 算法/数据结构】 邻接矩阵表示图,深度,广度优先遍历 算法设计+代码+图片
- Adjacency list追溯到源头的方法
- geeksforgeeks
- List-C
- POJ 1005
- Android 假冒建行网银病毒分析
- 关于sqlite
- Oracle10g下载地址--多平台下的32位和64位
- 若php遇到解决You don't have permission to access /phpmyadmin/main.php on this server.
- GeeksforGeeks - Adjacency List邻接矩阵C\C++代码
- MFC绘图
- Mac OS—苹果搭建Android开发环境
- ubuntu 软件安装
- C# 构造命名迭代器
- 百度云BAE3.0 的ssh配置(把本机ssh项目迁移至BAE3.0)
- Ubuntu下deb包的安装方法
- 最长公共子序列问题
- test