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

所属分类: 软件编程 / C 语言 阅读数: 128
收藏 0 赞 0 分享

本文实例为大家分享了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;
}

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

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

更多精彩内容其他人还在看

深入解析C++中派生类的构造函数

这篇文章主要介绍了深入解析C++中派生类的构造函数,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

解析C++中多层派生时的构造函数及一些特殊形式

这篇文章主要介绍了解析C++中多层派生时的构造函数及一些特殊形式,特殊形式主要针对基类和子对象类型的构造函数内容,需要的朋友可以参考下
收藏 0 赞 0 分享

简单介绍C++编程中派生类的析构函数

这篇文章主要介绍了C++编程中派生类的析构函数,析构函数平时一般使用较少,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解析C++中类的多重继承

这篇文章主要介绍了深入解析C++中类的多重继承,包括多重继承相关的二义性问题,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C++中基类与派生类的转换以及虚基类

这篇文章主要介绍了详解C++中基类与派生类的转换以及虚基类,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

解析C++编程中的继承方面的运用

这篇文章主要介绍了解析C++编程中的继承方面的运用,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C++编程的多态性概念

这篇文章主要介绍了C++编程的多态性概念,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

c++统计文件中字符个数代码汇总

本文给大家汇总介绍了3种使用C++实现统计文件中的字符个数的方法,非常的简单实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

详解C++编程中的虚函数

这篇文章主要介绍了详解C++编程中的虚函数,包括在什么情况下应当声明虚函数的相关讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言putenv()函数和getenv()函数的使用详解

这篇文章主要介绍了C语言putenv()函数和getenv()函数的使用详解,用来进行环境变量的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多