C++实现有向图邻接表的构建

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

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

#include<iostream>
#include<string>
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;
}

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

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

(0)

相关推荐

  • C++实现有向图的邻接表表示

    本文实例为大家分享了C++有向图的邻接表表示,供大家参考,具体内容如下 一.思路: 有向图的插入有向边.删除边.删除顶点和无向图的有区别.其他的和无向图的类似. 1.插入有向边<e1, e2> 只需要插入<e1, e2>边就行,不需要插入对称边<e2, e1> 2.删除边<e1,e2>: 只需要删除<e1, e2>边就行,不需要仔找对称边<e2, e1>进行删除. 3.删除顶点v: 首先,要在邻接表中删除以v为头的边<v, w&

  • C++实现有向图邻接表的构建

    本文实例为大家分享了C++实现有向图邻接表的构建代码,供大家参考,具体内容如下 数据结构里面的一道基础题,分享下自己的写法,验证可跑. #include<iostream> #include<string> const int MAX = 20; using namespace std; struct ArcNode { //弧结点 int adjvex = -1; //所指顶点位置 ArcNode *nextarc = nullptr; //下一条狐指针 size_t info

  • Java用邻接表存储图的示例代码

    目录 一.点睛 1.无向图 2.无向图的链接表 3.说明 4.无向图 二.邻接表的数据结构 1.节点 2.邻接点 三.算法步骤 四.实现 五.测试 一.点睛 邻接表是图的一种链式存储方法,其数据结构包括两部分:节点和邻接点. 用邻接表可以表示无向图,有向图和网.在此用无向图进行说明. 1.无向图 2.无向图的链接表 3.说明 节点 a 的邻接点是节点 b.d,其邻接点的存储下标为1.3,按照头插法(逆序)将其放入节点 a 后面的单链表中. 节点 b 的邻接点是节点 a.c.d,其邻接点的存储下标

  • java实现图的邻接表存储结构的两种方式及实例应用详解

    前言 本篇来谈一谈图的邻接表实现的两种方式,首先我们明确一点"学会图的邻接表实现的关键点在于":你所建立的图的邻接表的对象是什么! 首先我们看一下<算法导论>中关于图的邻接表的定义: 图G=(V,E)的邻接表表示有一个包含 |V| 个列表的数组Adj所组成,其中每个列表对应于V中的一个顶点,对于每一个u∈V,邻接表Adj[u]包含所有满足条件(u,v)∈E的顶点v,亦即,Adj[u]包含图G中所有和顶点u相邻的顶点.(或者他也可能指向这些顶点的指针),每个邻接表中的顶点一般

  • C++数据结构之实现邻接表

    本文实例为大家分享了C++数据结构之实现邻接表的具体代码,供大家参考,具体内容如下 一.图的邻接表实现 1.实现了以顶点顺序表.边链表为存储结构的邻接表: 2.实现了图的创建(有向/无向/图/网).边的增删操作.深度优先递归/非递归遍历.广度优先遍历的算法: 3.采用顶点对象列表.边(弧)对象列表的方式,对图的创建进行初始化:引用 "ObjArrayList.h"头文件,头文件可参看之前博文"数据结构之顺序列表(支持对象元素)"代码: 4.深度优先遍历分别采用递归/

  • C语言邻接表建立图详解

    目录 有向图 无向图 邻接表存图进行拓扑排序 总结 有向图 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<stack> using namespace std; #define maxn 200 int v, e; //表结点 typedef struct _Enode { int ivex; //该边所指向的节点位置 int value;//如果边有权值的话,就对其

  • C/C++浅析邻接表拓扑排序算法的实现

    目录 前言 一.拓扑排序算法的思路 二.实现步骤 1.求个顶点的入度 2.拓扑排序的实现 三.测试结果 总结 前言 在软件开发.施工过程.教学安排等等的一系列活动中,往往需要一个有向无环图来表示其是否成成功进行下去. 在一个有向图为顶点表示活动的网中,我们称为AOV网(Activity On Vertex Network).设G={V,E}是一个具有n个顶点的有向图,V中的顶点序列v1,v2,…,vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在vj之前.则我们称这样的顶点为一个

  • Python如何自定义邻接表图类

    目录 Python自定义邻接表图类 图抽象数据类型(ADT)的术语 邻接矩阵和邻接表的优缺点 自定义顶点类 python图的邻接表表示 总结 Python自定义邻接表图类 图抽象数据类型(ADT)的术语 顶点(Vertex):也称节点(node),是图的基础部分.具有名称标识“key”.顶点也可以有附加信息项“playload”. 边(Edge):也称弧(arc),也是图的基础组成部分.如果一条边连接两个顶点,则表示两者具有联系.边可以是单向的,也可以是双向的.如果图中的边都是单向的,则称这个图

  • python实现邻接表转邻接矩阵

    目录 python邻接表转邻接矩阵 图的存储—邻接矩阵与邻接表 邻接矩阵 邻接表 入度与出度 书面练习 编程练习 总结 python邻接表转邻接矩阵 闲话少说,前段时间看到有同学问怎么把邻接表转成邻接矩阵,想了想做了一下,仅供参考.= = _python 2.7 _ 包:networkX,numpy # coding:utf-8 #将一个图,network转换为邻接矩阵 import networkx  as nx import numpy as np G = nx.read_weighted_

  • 图的邻接表存储表示示例讲解

    复制代码 代码如下: //---------图的邻接表存储表示------- #include<stdio.h>#include<stdlib.h> #define MAX_VERTEXT_NUM 20 typedef int InfoType;typedef char VertextType; typedef struct ArcNode{    int adjvex;    struct ArcNode *nextArc;    InfoType *info;}ArcNode;

随机推荐