码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构】— —邻接矩阵和邻接表存储图结构


    🎃个人专栏:

    🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客

    🐳Java基础:Java基础_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博客

    欢迎收看,希望对大家有用!

    目录

    🎯目的:

    🎯内容:

    🎯环境:

    🎯步骤:

    内容1——邻接矩阵

     邻接矩阵存储图代码:

    内容2——邻接表

    邻接表存储图代码: 


      🎃Hello,大家好,今天我们要做的是 邻接矩阵和邻接表存储图结构。

    🎯目的:

    1、掌握图结构的静态及操作特点;

    2、掌握图结构的静态存储和常见操作在C语言环境中的实现方法;

    3、掌握图结构的遍历算法在C语言环境中的实现方法。

    4、理解求最小生成树、最短路径、关键路径的算法实现。

    🎯内容:

    1、会使用邻接矩阵的方式存储图片,并实现相应操作。

    2、会使用邻接表的方式存储图片,并实现相应操作。

    🎯环境:

    TC或VC++。

    🎯步骤:

    要求:

    内容1——邻接矩阵

    (1)使用邻接矩阵的方式存储上边无向图;

    (2)以矩阵的形式输出无向图;

    (3)在邻接矩阵的基础上实现深度优先遍历和广度优先遍历。

     邻接矩阵存储图代码:

    1. #include "iostream"
    2. using namespace std;
    3. #define MaxInt 0
    4. #define MVNum 100
    5. #define OK 1
    6. typedef char VerTexType;
    7. typedef int ArcType;
    8. typedef int Status;
    9. typedef struct{
    10. VerTexType vexs[MVNum];//顶点
    11. ArcType arcs[MVNum][MVNum];//邻接矩阵
    12. int vexnum,arcnum;//当前的点数和边数
    13. }AMGraph;
    14. Status CreateUDN(AMGraph &G){
    15. cout<<"请输入总顶点数和总边数:"<
    16. cin>>G.vexnum>>G.arcnum;//输入总顶点数和总边数
    17. cout<<"请输入各点的信息:"<
    18. for(int i=0;i//输入各点信息
    19. cin>>G.vexs[i];
    20. for(int i=0;i//初始化邻接矩阵
    21. for(int j=0;j
    22. G.arcs[i][j]=MaxInt;
    23. for(int k=0;k
    24. int i,j,v1,v2,w;
    25. cout<<"请输入两个点的信息及权值:"<
    26. cin>>v1>>v2>>w;
    27. i=v1-1;j=v2-1;
    28. G.arcs[i][j]=w;
    29. G.arcs[j][i]=G.arcs[i][j];
    30. }
    31. return OK;
    32. }
    33. int main(){
    34. AMGraph g;
    35. CreateUDN(g);
    36. cout<<"无向图邻接矩阵如下:"<
    37. for(int i=0;i
    38. for(int j=0;j
    39. printf("%5d",g.arcs[i][j]);
    40. cout<
    41. }
    42. }

    内容2——邻接表

    (1)使用邻接表的方式存储图;

    (2)以邻接表的形式输出该图;

    (3)(选做)实现深度优先遍历和广度优先遍历。

    邻接表存储图代码: 

    1. #include "iostream"
    2. using namespace std;
    3. #define MVNum 100
    4. #define OK 1
    5. typedef int OtherInfo;
    6. typedef int Status;
    7. typedef int VerTexType;
    8. typedef struct ArcNode{//边结点
    9. int adjvex;//该边所指向的顶点位置
    10. struct ArcNode *nextarc;//指向下一条边的指针
    11. OtherInfo info;//和边相关的信息
    12. }ArcNode;
    13. typedef struct VNode//顶点信息
    14. {
    15. VerTexType data;
    16. ArcNode *firstarc;//指向第一条依附于带顶点的边和指针
    17. }VNode,AdjList[MVNum];
    18. typedef struct{
    19. AdjList vertices;
    20. int vexnum,arcnum;//图的当前顶点数和边数
    21. }ALGraph;
    22. Status CreateUDG(ALGraph &G){
    23. cout<<"输入顶点数和总边数"<
    24. cin>>G.vexnum>>G.arcnum;
    25. cout<<"输入各点"<
    26. for(int i=0;i//输入各点,构建表头结点
    27. cin>>G.vertices[i].data;
    28. G.vertices[i].firstarc=NULL;
    29. }
    30. for(int k=0;k//输入各边,构造边表
    31. { int v1,v2,i,j;
    32. cout<<"请输入一条边依附的两个顶点:"<
    33. cin>>v1>>v2;
    34. i=v1-1;
    35. j=v2-1;
    36. ArcNode *p1;
    37. p1=new ArcNode;
    38. p1->adjvex=j;//邻接点的序号为j;
    39. p1->nextarc=G.vertices[i].firstarc;
    40. G.vertices[i].firstarc=p1;
    41. ArcNode* p2=new ArcNode;
    42. p2->adjvex=i;
    43. p2->nextarc=G.vertices[j].firstarc;
    44. G.vertices[j].firstarc=p2;
    45. }
    46. return OK;
    47. }
    48. Status PrintUDG(ALGraph G) { //邻接表输出图
    49. for(int i = 0; i < G.vexnum; i++){ //遍历图中每一个点
    50. cout << i+1 << "(" << G.vertices[i].data << "):"; //输出当前点的标号和值
    51. ArcNode *p = G.vertices[i].firstarc; //指向当前点的第一条边
    52. while(p) { //输出与当前点相连的所有点的标号和值
    53. cout << p->adjvex + 1 << "(" << G.vertices[p->adjvex].data << ")" << "->";
    54. p = p->nextarc;
    55. }
    56. cout << "NULL" << endl;
    57. }
    58. return OK;
    59. }
    60. int main(){
    61. ALGraph g;
    62. CreateUDG(g);
    63. PrintUDG(g);
    64. }

  • 相关阅读:
    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
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号