🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
欢迎收看,希望对大家有用!
目录
🎃Hello,大家好,今天我们要做的是 邻接矩阵和邻接表存储图结构。
1、掌握图结构的静态及操作特点;
2、掌握图结构的静态存储和常见操作在C语言环境中的实现方法;
3、掌握图结构的遍历算法在C语言环境中的实现方法。
4、理解求最小生成树、最短路径、关键路径的算法实现。
1、会使用邻接矩阵的方式存储图片,并实现相应操作。
2、会使用邻接表的方式存储图片,并实现相应操作。
TC或VC++。

要求:
(1)使用邻接矩阵的方式存储上边无向图;
(2)以矩阵的形式输出无向图;
(3)在邻接矩阵的基础上实现深度优先遍历和广度优先遍历。

- #include "iostream"
- using namespace std;
- #define MaxInt 0
- #define MVNum 100
- #define OK 1
- typedef char VerTexType;
- typedef int ArcType;
- typedef int Status;
- typedef struct{
- VerTexType vexs[MVNum];//顶点
- ArcType arcs[MVNum][MVNum];//邻接矩阵
- int vexnum,arcnum;//当前的点数和边数
- }AMGraph;
- Status CreateUDN(AMGraph &G){
- cout<<"请输入总顶点数和总边数:"<
- cin>>G.vexnum>>G.arcnum;//输入总顶点数和总边数
- cout<<"请输入各点的信息:"<
- for(int i=0;i
//输入各点信息 - cin>>G.vexs[i];
- for(int i=0;i
//初始化邻接矩阵 - for(int j=0;j
- G.arcs[i][j]=MaxInt;
- for(int k=0;k
- int i,j,v1,v2,w;
- cout<<"请输入两个点的信息及权值:"<
- cin>>v1>>v2>>w;
- i=v1-1;j=v2-1;
- G.arcs[i][j]=w;
- G.arcs[j][i]=G.arcs[i][j];
- }
- return OK;
- }
- int main(){
- AMGraph g;
- CreateUDN(g);
- cout<<"无向图邻接矩阵如下:"<
- for(int i=0;i
- for(int j=0;j
- printf("%5d",g.arcs[i][j]);
- cout<
- }
- }
内容2——邻接表
(1)使用邻接表的方式存储图;
(2)以邻接表的形式输出该图;
(3)(选做)实现深度优先遍历和广度优先遍历。

邻接表存储图代码:
- #include "iostream"
- using namespace std;
- #define MVNum 100
- #define OK 1
- typedef int OtherInfo;
- typedef int Status;
- typedef int VerTexType;
- typedef struct ArcNode{//边结点
- int adjvex;//该边所指向的顶点位置
- struct ArcNode *nextarc;//指向下一条边的指针
- OtherInfo info;//和边相关的信息
- }ArcNode;
- typedef struct VNode//顶点信息
- {
- VerTexType data;
- ArcNode *firstarc;//指向第一条依附于带顶点的边和指针
- }VNode,AdjList[MVNum];
- typedef struct{
- AdjList vertices;
- int vexnum,arcnum;//图的当前顶点数和边数
- }ALGraph;
- Status CreateUDG(ALGraph &G){
- cout<<"输入顶点数和总边数"<
- cin>>G.vexnum>>G.arcnum;
- cout<<"输入各点"<
- for(int i=0;i
//输入各点,构建表头结点 - cin>>G.vertices[i].data;
- G.vertices[i].firstarc=NULL;
- }
- for(int k=0;k
//输入各边,构造边表 - { int v1,v2,i,j;
- cout<<"请输入一条边依附的两个顶点:"<
- cin>>v1>>v2;
- i=v1-1;
- j=v2-1;
- ArcNode *p1;
- p1=new ArcNode;
- p1->adjvex=j;//邻接点的序号为j;
- p1->nextarc=G.vertices[i].firstarc;
- G.vertices[i].firstarc=p1;
- ArcNode* p2=new ArcNode;
- p2->adjvex=i;
- p2->nextarc=G.vertices[j].firstarc;
- G.vertices[j].firstarc=p2;
- }
- return OK;
- }
- Status PrintUDG(ALGraph G) { //邻接表输出图
- for(int i = 0; i < G.vexnum; i++){ //遍历图中每一个点
- cout << i+1 << "(" << G.vertices[i].data << "):"; //输出当前点的标号和值
- ArcNode *p = G.vertices[i].firstarc; //指向当前点的第一条边
- while(p) { //输出与当前点相连的所有点的标号和值
- cout << p->adjvex + 1 << "(" << G.vertices[p->adjvex].data << ")" << "->";
- p = p->nextarc;
- }
- cout << "NULL" << endl;
- }
- return OK;
- }
- int main(){
- ALGraph g;
- CreateUDG(g);
- PrintUDG(g);
- }
-
相关阅读:
scratch芝麻开门 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析
devops-4:Jenkins基于k8s cloud和docker cloud动态增减节点
c++内存管理
vue3+node.js+mysql+ant design实现表格的查询功能
电大搜题——搜索难题
窗口函数的5种方法总结
springBoot如何集成feign呢?
Python计算泊松分布教程
10个好用的Mac数据恢复软件推荐—恢复率高达99%
Jmeter脚本参数化和正则匹配
-
原文地址:https://blog.csdn.net/shsjssnn/article/details/133975522