数据结构:邻接表法存储有向图
有向图的拓扑结构
#include<iostream>
#include<string>
#include<queue>#define MAXVEX 10using namespace std;class Graph{
private:struct EdgeNode{int adjvex;int weight;EdgeNode* next;};struct VertexNode{string data;EdgeNode *pFirstEdge;};struct AdjListGraph{VertexNode adjList[MAXVEX];int iVexNum;int iEdgeNum;};AdjListGraph *graph;public:Graph(){graph=new AdjListGraph();}int GetIndexByVertexVal(AdjListGraph *graph,string val){//通过点的值获取点的下标(邻接表中的下标) for(int i=0;i<graph->iVexNum;i++){if(val==graph->adjList[i].data){return i;}}return -1;}int CreateAdjListGraph(){//创建上图中的有向图 CreateAdjListGraph_s(graph);}int CreateAdjListGraph_s(AdjListGraph *&graph){graph->iVexNum=8;graph->iEdgeNum=9;graph->adjList[0].data="first";graph->adjList[1].data="second";graph->adjList[2].data="third";graph->adjList[3].data="forth";graph->adjList[4].data="fifth";graph->adjList[5].data="sixth";graph->adjList[6].data="seventh";graph->adjList[7].data="ninth";for(int i=0;i<graph->iVexNum;i++){graph->adjList[i].pFirstEdge=NULL;}int m=0;int n=2;EdgeNode *EdgeNode_1=new EdgeNode;EdgeNode_1->adjvex=n;EdgeNode_1->weight=0;EdgeNode_1->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_1;m=1;n=3;EdgeNode *EdgeNode_2=new EdgeNode;EdgeNode_2->adjvex=n;EdgeNode_2->weight=0;EdgeNode_2->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_2;m=1;n=5;EdgeNode *EdgeNode_3=new EdgeNode;EdgeNode_3->adjvex=n;EdgeNode_3->weight=0;EdgeNode_3->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_3;m=2;n=4;EdgeNode *EdgeNode_4=new EdgeNode;EdgeNode_4->adjvex=n;EdgeNode_4->weight=0;EdgeNode_4->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_4;m=3;n=4;EdgeNode *EdgeNode_5=new EdgeNode;EdgeNode_5->adjvex=n;EdgeNode_5->weight=0;EdgeNode_5->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_5;m=3;n=5;EdgeNode *EdgeNode_6=new EdgeNode;EdgeNode_6->adjvex=n;EdgeNode_6->weight=0;EdgeNode_6->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_6;m=4;n=6;EdgeNode *EdgeNode_7=new EdgeNode;EdgeNode_7->adjvex=n;EdgeNode_7->weight=0;EdgeNode_7->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_7;m=5;n=7;EdgeNode *EdgeNode_8=new EdgeNode;EdgeNode_8->adjvex=n;EdgeNode_8->weight=0;EdgeNode_8->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_8;m=6;n=7;EdgeNode *EdgeNode_9=new EdgeNode;EdgeNode_9->adjvex=n;EdgeNode_9->weight=0;EdgeNode_9->next=graph->adjList[m].pFirstEdge;graph->adjList[m].pFirstEdge=EdgeNode_9;return 1;}void DFS(int i){//深度优先搜索 cout<<"DFS"<<endl;bool visited[MAXVEX]={0};DFS_s(visited,i,graph);cout<<endl;}void DFS_s(bool *visited,int i,AdjListGraph* graph){cout<<graph->adjList[i].data<<" ";visited[i]=true;EdgeNode *pEdge=graph->adjList[i].pFirstEdge;while(pEdge){int j=pEdge->adjvex;if(!visited[j]){DFS_s(visited,j,graph);}pEdge=pEdge->next;}}void BFS(int i){//广度优先搜索 cout<<"BFS"<<endl;bool visited[MAXVEX]={0};BFS_s(visited,i,graph);cout<<endl;}void BFS_s(bool *visited,int i,AdjListGraph *graph){queue<int> Q;cout<<graph->adjList[i].data<<" ";visited[i]=true;Q.push(i);while(!Q.empty()){int iVex=Q.front();Q.pop();EdgeNode *pEdge=graph->adjList[iVex].pFirstEdge;while(pEdge){if(!visited[pEdge->adjvex]){cout<<graph->adjList[pEdge->adjvex].data<<" ";visited[pEdge->adjvex]=true;Q.push(pEdge->adjvex);}pEdge=pEdge->next;}} }int GetVertexDegree(AdjListGraph *graph,string val){//计算出度和入度的和 int m=GetIndexByVertexVal(graph,val);int iCount=0;for(int i=0;i<graph->iVexNum;i++){if(i==m){EdgeNode *pEdgeOut=graph->adjList[i].pFirstEdge;while(pEdgeOut){//这里累加的是出度 ++iCount;pEdgeOut=pEdgeOut->next;}}else{EdgeNode *pEdgeIn=graph->adjList[i].pFirstEdge;while(pEdgeIn){//这里累加的是入度 if(pEdgeIn->adjvex==m){++iCount;}pEdgeIn=pEdgeIn->next;}}}return iCount;}
};int main(){Graph *g=new Graph();g->CreateAdjListGraph(); g->BFS(1);g->DFS(1);return 0;
}
https://blog.csdn.net/s634772208/article/details/45580333
数据结构:邻接表法存储有向图相关推荐
- 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历
邻接表法存储 邻接表发存储需要时无权无向图.用数组+链表的方式完成 数组用来记录地点,链表来记录每一个地点对应的相邻地点 1.构造一个数据结构来存放数组的序号以及指针用来指向链表 2.创造结点,构建链 ...
- 无向图有向图的邻接表法建立
目录 无向图的邻接表法建立 有向图的邻接表法 无向图的邻接表法建立 要求建立一个无向图,采用邻接表做为存储结构. 例如: 输入信息为:第一行给出图的顶点数n和边数e.第二行给出n个字符,表示n个顶点的 ...
- 数据结构之图的存储结构:邻接表法
图的存储结构:邻接表法 产生条件: 邻接表法的定义: 邻接表法的特点: 邻接表法的代码定义: 邻接表法与邻接矩阵法的对比: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 邻接表法 ...
- 图的存储结构——邻接表法
图的存储结构--邻接表法 一.邻接表 由顶点表和边表构成,顶点表由顶点域(data)和指向第一条邻接边的指针(firstarc)构成,边表(邻接表)结点由邻接点域(adjvex)和指向下一条邻接边 ...
- 图——图的存储结构(邻接矩阵和邻接表法)
图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...
- 图的存储——邻接表法
文章目录 一.邻接表法 二.复杂度分析(G(V,E)) 1.无向图 2.有向图 总结(和邻接矩阵的对比) 一.邻接表法 使用一个顶点表存储顶点信息,每个顶点之后连接该顶点的相连边的信息(链表). 结构 ...
- 数据结构---邻接表的BFS
数据结构-邻接表的BFS 原理:参考趣学数据结构 代码: 队列代码: #pragma once #define elemType int #define N 100 #include<stdli ...
- 数据结构---邻接表的DFS
数据结构-邻接表的DFS 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define typeNode int / ...
- dijkstra迪杰斯特拉算法(邻接表法)
算法简易过程: 迪杰斯特拉算法(朴素) O(n^2) G={V,E} V:点集合 E:边集合 初始化时 令 S={某源点ear}, T=V-S= {其余顶点},T中顶点对应的距离(ear, Vi)值若 ...
- 邻接表形式存储图并且按广度优先搜索遍历的C语言实现
用邻接表形式存储图并且按广度优先搜索打印遍历结果 #include<stdio.h> #define MAX_VERTEX_NUM 20//最多顶点个数 #define ERROR -1t ...
最新文章
- Oracle视图添加约束,Oracle的约束视图
- 【前段开发】行内元素和块级元素总结(HTML CSS)
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(五)客户端介绍
- Oracle备份还原操作方法
- VXLAN配置实例(三)——VXLAN集中式双活网关
- mvc html的扩展,asp.net mvc - 使用Razor声明性视图中的MVC HtmlHelper扩展
- 易筋SpringBoot 2.1 | 第九篇:SpringBoot使用Redis内存数据库
- 并发编程常见面试题总结一
- 复变函数在计算机科学中的应用,复变函数的应用以及发展史
- 24.猫狗数据自定义训练
- NC65自定义参照 开发
- Java线程何时放弃CPU时间片
- Pray for 京阿尼——愿逝者安息,伤者早日康复
- 高频功率放大器输出为什么会有高次谐波
- 骗你不是人 硬盘传输速度提升100倍的方法
- 计算机用户凭据删除,win8系统如何删除保存的共享凭据(用户名和密码)
- 批处理 bat 改文件后缀名
- 康托展开(hdu1430)
- 快排解Top-K问题
- NST1001温度传感器驱动-FPGA
热门文章
- AAAI论文Joint Extraction of Entities and Overlapping Relations Using Position-Attentive Sequence阅读笔记
- Mybatis-02-对数据库的基本操作
- Flink 流批一体在阿里的落地
- 仅 1 年 GitHub Star 数翻倍,Flink 做了什么?
- python正则库安装_python中正则表达式regex库的使用
- python 下标 遍历列表_Python中遍历列表中元素的操作
- vs2015 ef 连接mysql_VS2015 + EF6连接MYSQL
- windows关于python虚拟机的设置以及安装使用virtualenv
- pppoe路由桥混合模式_192.168.1.1路由器怎么设置和登陆
- 基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换