本文实例为大家分享了C++实现有向图邻接表的构建代码,供大家参考,具体内容如下

数据结构里面的一道基础题,分享下自己的写法,验证可跑。

#include

#include

const int MAX = 20;

using namespace std;

struct ArcNode { //弧结点

int adjvex = -1; //所指顶点位置

ArcNode *nextarc = nullptr; //下一条狐指针

size_t info = 0; //弧信息

};

struct VNode { //顶点

string data = "0";

ArcNode *firstarc = nullptr; //第一条依附该顶点的弧的指针

};

struct Graph { //图结构

VNode vertices[MAX]; //全部顶点

int vexnum, arcnum; //顶点数和弧数

Graph(int m, int n) :vexnum(m), arcnum(n) {};

Graph() :vexnum(0), arcnum(0) {};

};

int main()

{

int vnum, anum, tempanum = 0;

cout << "输入顶点数:";

cin >> vnum;

cout << "输入弧数:";

cin >> anum;

cout << "\n\n";

Graph G(vnum, anum);

for (int i = 0; i != vnum; ++i) {

cout << "输入结点" << i << "的信息:";

cin >> G.vertices[i].data;

if (tempanum != anum)

cout << "输入依靠此结点的弧的信息(输入-1以停止):\n";

else

cout << "已输入所有弧的信息!\n";

bool first = true;

ArcNode *p, *temp;

for (int j = 0; (j != anum) && (tempanum != vnum); ++j) {

int pointto;

cout << "输入弧" << tempanum << "所指向的顶点位置:";

cin >> pointto;

if (pointto == -1) break;

else {

++tempanum;

if (first == true) {

first = false;

G.vertices[i].firstarc = new ArcNode;

G.vertices[i].firstarc->adjvex = pointto;

p = G.vertices[i].firstarc;

}

else {

temp = new ArcNode;

temp->adjvex = pointto;

p->nextarc = temp;

p = temp;

}

}

}

cout << endl;

}

for (int i = 0; i != anum; ++i) {

cout << "顶点" << i << ": |" << G.vertices[i].data << "|";

if (G.vertices[i].firstarc) {

cout << " -> " << G.vertices[i].firstarc->adjvex;

auto pt = G.vertices[i].firstarc->nextarc;

while (pt) {

cout << " -> " << pt->adjvex;

pt = pt->nextarc;

}

cout << "-> ^";

}

else

cout << " -> ^";

cout << endl;

}

return 0;

}

由于只是单纯构建基本的无权值有向图邻接表,里面的弧结构中弧信息未利用到。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: C++实现有向图邻接表的构建

本文地址: http://www.cppcns.com/ruanjian/c/310269.html

c语言邻接表的构建_C++实现有向图邻接表的构建相关推荐

  1. 不同表结构数据迁移_C语言:数据结构-广义表的存储结构

    广义表相对于线性表﹑数组﹑串等线性结构是较为复杂的结构,其元素可以具有不同的结构(可以是原子,也可以是列表),通常采用链式结构存储广义表. (1)表头.表尾链式存储 链式结构中用结点储存列表中的数据元 ...

  2. c语言机票座位预定系统_C语言实现飞机订票系统

    问题描述与题目要求 问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方.试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能: (1) 订票:若该航次余票大于等于乘客订票数, ...

  3. 三线表是什么?R语言使用table1包绘制(生成)三线表、构建不分层的三线表

    三线表是什么?R语言使用table1包绘制(生成)三线表.构建不分层的三线表 目录

  4. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  5. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(构建自定义函数配置显示均值、标准偏差)实战

    R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(构建自定义函数配置显示均值.标准偏差)实战 目录

  6. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、xgboost模型预测推理并使用混淆矩阵评估模型、可视化模型预测的概率分布

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.xgboost模型预测推理并使用混淆矩阵评估模型.可视化模型预测的概率分布 目录

  7. R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

    R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型 目录 R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

  8. R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集

    R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集 目录 R语言使

  9. R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)

    R语言tidyr包pivot_longer函数.pivot_wider函数数据表变换实战(长表到宽表.宽表到长表) 目录

最新文章

  1. 从零到百亿级,揭秘科大讯飞广告平台架构演进之路
  2. uc/os内存管理的理解
  3. (最小生成树) Networking -- POJ -- 1287
  4. WindowsPhone设置启动欢迎页面
  5. [Android] 给图像添加相框、圆形圆角显示图片、图像合成知识
  6. 手动建立Mysql表实体类技巧
  7. 获取浏览器高度_QQ浏览器违法收集用户信息,你的浏览器还安全吗?
  8. 程序员新动向!大龄困惑详解!
  9. C语言序列是否有序、序列中删除指定数字、序列中整数去重、有序序列合并问题
  10. loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)
  11. 操作class属性的新API--classList
  12. Java连接程序数据源
  13. 计算机二级C语言程序设计 第一章 程序设计基本概念
  14. 计算机数值方法(1):引论
  15. Java实现中英文词典功能
  16. 【量化笔记】量价关系分析
  17. python 将多个文件夹合成一个文件夹
  18. keep-alive上加v-if导致缓存失效
  19. MySQL中的insert ignore into讲解
  20. 动态网站开发(应该怎么做啊)

热门文章

  1. everything文件搜索_Everything,闪电搜索,百万文件100%秒搜,真是文件搜索神器!...
  2. 为什么要用unittest
  3. 实验十四 课程学习总结
  4. MySQL - 日常操作二 备份还原
  5. 10.9 kill以及raise函数
  6. 引入extThree20JSON之后,怎么在工程中使用
  7. php模拟socket一次连接,多次发送数据的实现
  8. Netbeans搭建Android环境
  9. python学习笔记(二)— 集合
  10. [POJ1155]TELE