采用邻接表表示法创建无向图
算法步骤:
1.输入总顶点数和总边数
2.依次输入点的信息存入顶点表中,是每个表头结点的指针域初始化为NULL
3.创建邻接表。依次输入每条边依附的两个顶点,确定这两个顶点的序号i和j之后,将此边结点分别插入Vi和Vj对应的两个边链`表头部。
//采用邻接表表示法创建无向图#include <iostream>
using namespace std;#define MVNum 100 //最大顶点数
#define OK 1typedef char VerTexType; //-==顶点信息
typedef int OtherInfo; //和边相关的信息 //- - - - -图的邻接表存储表示- - - - -
typedef struct ArcNode{ //边结点 int adjvex; //该边所指向的顶点的位置 struct ArcNode *nextarc; //指向下一条边的指针 OtherInfo info; //和边相关的信息
}ArcNode; typedef struct VNode{ VerTexType data; //顶点信息 ArcNode *firstarc; //指向第一条依附该顶点的边的指针
}VNode, AdjList[MVNum]; //AdjList表示邻接表类型 typedef struct{ AdjList vertices; //邻接表 int vexnum, arcnum; //图的当前顶点数和边数
}ALGraph;int LocateVex(ALGraph G , VerTexType v){//确定点v在G中的位置for(int i = 0; i < G.vexnum; ++i)if(G.vertices[i].data == v)return i;return -1;
}//LocateVexint CreateUDG(ALGraph &G){ //采用邻接表表示法,创建无向图Gint i , k;cout <<"请输入总顶点数,总边数中间以空格隔开:";cin >> G.vexnum >> G.arcnum; //输入总顶点数,总边数 cout << endl;cout << "输入点的名称,如 a " <<endl;for(i = 0; i < G.vexnum; ++i){ //输入各点,构造表头结点表cout << "请输入第" << (i+1) << "个点的名称:";cin >> G.vertices[i].data; //输入顶点值 G.vertices[i].firstarc=NULL; //初始化表头结点的指针域为NULL }//forcout << endl;cout << "请输入一条边依附的顶点,如 a b" << endl;for(k = 0; k < G.arcnum;++k){ //输入各边,构造邻接表VerTexType v1 , v2;int i , j;cout << "请输入第" << (k + 1) << "条边依附的顶点:";cin >> v1 >> v2; //输入一条边依附的两个顶点i = LocateVex(G, v1); j = LocateVex(G, v2);//确定v1和v2在G中位置,即顶点在G.vertices中的序号 ArcNode *p1=new ArcNode; //生成一个新的边结点*p1 p1->adjvex=j; //邻接点序号为j p1->nextarc= G.vertices[i].firstarc; G.vertices[i].firstarc=p1; //将新结点*p1插入顶点vi的边表头部ArcNode *p2=new ArcNode; //生成另一个对称的新的边结点*p2 p2->adjvex=i; //邻接点序号为i p2->nextarc= G.vertices[j].firstarc; G.vertices[j].firstarc=p2; //将新结点*p2插入顶点vj的边表头部 }//for return OK;
}//CreateUDGint main(){cout << "***************采用邻接表表示法创建无向图**************" << endl << endl;ALGraph G;CreateUDG(G);int i;cout << endl;cout << "*****邻接表表示法创建的无向图*****" << endl;for(i = 0 ; i < G.vexnum ; ++i){VNode temp = G.vertices[i];ArcNode *p = temp.firstarc;if(p == NULL){cout << G.vertices[i].data;cout << endl;}else{cout << temp.data;while(p){cout << "->";cout << p->adjvex;p = p->nextarc;}}cout << endl;}return 0;
}//main
运行结果:
采用邻接表表示法创建无向图相关推荐
- C语言邻接表表示法创建无向图并输出
C语言邻接表表示法创建无向图并输出 邻接表是图的一种链式存储结构,对图的每个顶点建立一个单链表,单链表第一个结点存放顶点信息,其余存放有关边信息. 邻接表由表头结点表和边表组成. 邻接表存储结构 #i ...
- 算法6.6 采用邻接表表示图的深度优先搜索遍历
算法6.6 采用邻接表表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接表存储表示 # ...
- 邻接表法创建无向图(C语言)
题目 本题要求建立一个无向图,采用邻接表做为存储结构. 例如: 输入信息为:第一行给出图的顶点数n和边数e.第二行给出n个字符,表示n个顶点的数据元素的值.后面是e行,给出每一条边的两个顶点编号. 输 ...
- 6-6 采用邻接表创建无向图
采用邻接表创建无向图G ,依次输出各顶点的度. 函数接口定义: void CreateUDG(ALGraph &G); 其中 G 是采用邻接表表示的无向图. 裁判测试程序样例: #includ ...
- 数据结构与算法A实验六图论---7-10 邻接矩阵表示法创建无向图
采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一 ...
- 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径。设计算法,将一个无向图的邻接矩阵转换为邻接表。
采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径.设计算法,将一个无向图的邻接矩阵转换为邻接表. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径. 设计算法,将一个无向图的邻 ...
- 有向图的邻接表表示法
图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List). 1. ...
- 《数据结构》-图的邻接表表示法(四)
邻接表表示法(链式) 存储定义: 顶点:按编号顺序将顶点数据存储在一维数组中 关联同一顶点的边(以顶点为尾的弧):用线性链表存储 无向图的邻接表 例如,如下无向图 则它的邻接表为 无向图邻接表的特点: ...
- 【转载】邻接表表示法
图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点v i ,该方法把所有邻接于v i 的顶点v j 链成一个带头 结点的单链表,这个单链表就称为顶点v i 的邻接表(Ad ...
- 5-3 本题要求实现对图的深度优先遍历。 本题中图的表示采用邻接表表示
程序填空题 5-3 本题要求实现对图的深度优先遍历. 本题中图的表示采用邻接表表示 #include <stdlib.h> #include <stdio.h>typedef ...
最新文章
- Pure-FTPd服务器
- redis mysql 案例_linux安装redis和mysql的实例讲解
- 探索ASP.NET Core中的IStartupFilter
- linux多少个端口,Linux允许python使用多少个网络端口?
- 数字电路技术可能出现的简答题_数字电子技术复习题(本科)
- 安全狗服云PC端V2.5.1发布 助力服务器安全运维
- Maven Ant 中截取字符串
- Java中Character类的概述及其详解
- YOLO v5训练时报fitness错误,求解
- chromebook刷机_如何以访客身份在Chrome和Chromebook上浏览
- java书写开头,JAVA代码书写规范汇总详解
- 机器人编程要学哪些知识
- 少儿编程会培养什么能力
- html网页北京大学,北京大学1.html
- 让AI自己调整超参数,谷歌大脑新优化器火了,自适应不同任务,83个任务训练加速比经典Adam更快...
- C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)
- Androidnbsp;LinearLayout与Relat…
- Android 攻城狮的进击 1 开发环境搭建HelloWorld.apk
- RSD 99脚本语言拼接屏幕墙实像元显示程序剖析
- 华恩JAVA班第22天