GeeksforGeeks - Adjacency List邻接矩阵C\C++代码
邻接矩阵的图示:

构建一个这种无向邻接矩阵。
參考站点: 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;
}
}
};
GeeksforGeeks - Adjacency List邻接矩阵C\C++代码的更多相关文章
- 邻接矩阵有向图(三)之 Java详解
前面分别介绍了邻接矩阵有向图的C和C++实现,本文通过Java实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:h ...
- 邻接矩阵有向图(二)之 C++详解
本章是通过C++实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...
- 邻接矩阵有向图(一)之 C语言详解
本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- 邻接矩阵无向图(三)之 Java详解
前面分别介绍了邻接矩阵无向图的C和C++实现,本文通过Java实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:h ...
- 邻接矩阵无向图(二)之 C++详解
本章是通过C++实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...
- 邻接矩阵无向图(一)之 C语言详解
本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- Matlab 图论最短路问题模型代码
最短路问题的基本内容 最短路问题研究的是,在一个点与点之间连接形成的网络图中,对应路径赋予一定的权重(可以理解为两点之间的距离),计算任意两点之间如何和走,路径最短的问题.在这里的距离可以理解成各种两 ...
- 算法笔记 #007# Backtracking
留着备用. 题目描述和代码参考:https://www.geeksforgeeks.org/8-queen-problem/ NQueenProblem(js代码): class NQueenProb ...
- WGCNA构建基因共表达网络详细教程
这篇文章更多的是对于混乱的中文资源的梳理,并补充了一些没有提到的重要参数,希望大家不会踩坑. 1. 简介 1.1 背景 WGCNA(weighted gene co-expression networ ...
随机推荐
- wcf例子01
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- QT 4.7.6 驱动 罗技C720摄像头
编译器: mingw32 gcc 4.8.1 mingw32 g++ 4.8.1 QT 版本: 4.8.6 OpenCV版本: 3.0.0 测试平台: win7 x64 --------------- ...
- char *详细指针
我前段时间写的char*和char[]差额.今char*做一个更深入的了解 1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码 #incl ...
- 【DP|多重背包可行性】POJ-1014 Dividing
Dividing Time Limit: 1000MS Memory Limit: 10000K Description Marsha and Bill own a collection of mar ...
- SQL 修改排序规则的问题 sql_latin1_general_cp1_ci_as
在一个项目中遇到:用原来的数据库生成的脚本,然后部署到新的服务器上,数据库的SQL_Latin1_General_CP1_CI_AS 怎么查询出来汉字都是乱码了. 遂查解决方法. 需要执行这个 ALT ...
- linux如何执行后台进程
linux直接执行一个过程.电流指令结束后.或者关闭掉shell形成过程将结束. 如何在后台执行的处理 办法1 采用nohup命令,nohup命令本身的意思no hung up他说,他们将不会收到sh ...
- jquery省市区三级联动
jquery省市区三级联动(数据来源国家统计局官网)内附源码下载 很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + ...
- DirectShow基础编程 最简单transform filter 编写步骤
目标编写一个transform filter,功能是对图像进行翻转. 一.选择基类 从CBaseFilter派生出三个用于编写transform filter的类,各自是:CTransformFilt ...
- 39一个可以让你受益HTML5课程
事不宜迟,本文作者是我们收集的在线学习HTML5资源.我们希望他们能够帮助你更好地学习HTML5. 不错啊! 只,说原作者40一个只有39一.由于第一5钍和8一是重复. 原文在此! 1. 五分钟入门H ...
- ios说说自己的计划是什么样的发展论坛
ios发展论坛在显示 iOS 5 在,主界面包含以下内置的应用程序: 信息.日历.照片. YouTube.股市.地图(AGPS辅助的Google地图).天气.时间.计算机.备忘录.系统设置. ...