邻接矩阵的图示:

构建一个这种无向邻接矩阵。

參考站点: 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++代码的更多相关文章

  1. 邻接矩阵有向图(三)之 Java详解

    前面分别介绍了邻接矩阵有向图的C和C++实现,本文通过Java实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:h ...

  2. 邻接矩阵有向图(二)之 C++详解

    本章是通过C++实现邻接矩阵有向图. 目录 1. 邻接矩阵有向图的介绍 2. 邻接矩阵有向图的代码说明 3. 邻接矩阵有向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...

  3. 邻接矩阵有向图(一)之 C语言详解

    本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...

  4. 邻接矩阵无向图(三)之 Java详解

    前面分别介绍了邻接矩阵无向图的C和C++实现,本文通过Java实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:h ...

  5. 邻接矩阵无向图(二)之 C++详解

    本章是通过C++实现邻接矩阵无向图. 目录 1. 邻接矩阵无向图的介绍 2. 邻接矩阵无向图的代码说明 3. 邻接矩阵无向图的完整源码 转载请注明出处:http://www.cnblogs.com/s ...

  6. 邻接矩阵无向图(一)之 C语言详解

    本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...

  7. Matlab 图论最短路问题模型代码

    最短路问题的基本内容 最短路问题研究的是,在一个点与点之间连接形成的网络图中,对应路径赋予一定的权重(可以理解为两点之间的距离),计算任意两点之间如何和走,路径最短的问题.在这里的距离可以理解成各种两 ...

  8. 算法笔记 #007# Backtracking

    留着备用. 题目描述和代码参考:https://www.geeksforgeeks.org/8-queen-problem/ NQueenProblem(js代码): class NQueenProb ...

  9. WGCNA构建基因共表达网络详细教程

    这篇文章更多的是对于混乱的中文资源的梳理,并补充了一些没有提到的重要参数,希望大家不会踩坑. 1. 简介 1.1 背景 WGCNA(weighted gene co-expression networ ...

随机推荐

  1. JS window.open()财产

    一. Window 对象 Window 对象是 JavaScript 顶级对象层次. Window 对象表示一个浏览器窗口或帧. Window 在对象 <body> 或 <frame ...

  2. Source Insight 光标变粗设置NotePad++光标设置

    为了更好的查看文档和代码,避免半天都找不到光标的情况,故做此说明 Source Insight 光标变粗 菜单中 Options --->Preferences --->Typing -- ...

  3. 【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告

    原题地址: https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 题目内容: Given a sing ...

  4. 80x86汇编小站站长简单介绍-2014年08月23日

    [序言] 旧版的"80x86汇编小站站长简单介绍"已经过时了, 因此于2013年10月01日花费1个小时又一次更新和排版一次. [人生格言]  1] 一生都用头脑而不是情绪解决这个 ...

  5. ios-html-get/post差额,简而言之(MS)CheckST

    get直接采取拉数据,post注射剂server.至server安全或使用get 而且由于get明确传递,password帐户A眼可以看得出来,甚至加密也可以很easy解,所以传password用po ...

  6. 输出无名空数组---精android、IOS App应用服务程序开发

    直接输出 [] 示例文件_samples/app/array_null.json在轻开平台的_samples/app/文件夹下 太Easy.无法写出很多其它的内容,大家还是自己试试吧! ! ! 相关资 ...

  7. NGUI简单背包系统的实现

    一.利用txt文件存储游戏物品信息 首先在asset下创建一个txt文件,这里我们命名为objectsInfoList.txt,并将其拖放到unity Project视图中. 其中txt中我们先存放一 ...

  8. poj 1466 Girls and Boys (最大独立集)

    链接:poj 1466 题意:有n个学生,每一个学生都和一些人有关系,如今要你找出最大的人数.使得这些人之间没关系 思路:求最大独立集,最大独立集=点数-最大匹配数 分析:建图时应该是一边是男生的点, ...

  9. 追索权 Eclipse + NDK error: stray &#39;\24&#39; in program

    [size=16px][b][color=#FF0000]追索权 Eclipse + NDK  error: stray '\24' in program[/color][b][/b][/b][/si ...

  10. Android引入高速缓存的异步加载全分辨率

    Android引进高速缓存的异步加载全分辨率 为什么要缓存 通过图像缩放,我们这样做是对的异步加载优化的大图,但现在的App这不仅是一款高清大图.图.动不动就是图文混排.以图代文,假设这些图片都载入到 ...