当前位置: 首页 > news >正文

2023/4/16总结

图的存储

链式前向星

  1. 链式前向星和邻接表很相似,只是存储方式变成了数组。

  2. 链式前向星一般要用到一个结构体数组和一个一维数组,结构体数组edges中包括三个变量。结构体数组的大小一般由边的大小决定。

edges数组中的to代表的是某条边的终点v。w代表的是这条边的权值。next代表的是上一条和本条边同起点(u)的边的编号。

struct node
{int to;int w;int next;
}edges[m];

 怎样才能知道和本条边同起点的上一条边的编号呢?用一个head数组记录以每第i为起点的边的编号,实际上这里的第一条边存储的位置其实是在以i为起点的所有边的最后输入的那个编号。

3.添加边的输入:

for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&u,&v,&w);
        edges[i].to=v;
        edges[i].w=w;
        edges[i].next=head[u];
        head[u]=i;
    }

head初始化为0,i表示每条边的编号。每一次都要更新相应的head。

如果按照索引顺序,next表示下一条边的存储位置,如果按照添加顺序,next即为上一条添加的边的位置。

所以,输入顺序和存图的顺序(遍历顺序)是相反的。

4.插入的模拟过程:

 5.代码如下:

#include"stdio.h"
int n,m;
struct node
{
    int to;
    int w;
    int next;
}edges[100];
int head[100];
main()
{
    int i,j,u,v,w;
    scanf("%d %d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&u,&v,&w);
        edges[i].to=v;
        edges[i].w=w;
        edges[i].next=head[u];
        head[u]=i;
    }
    for(i=1;i<=n;i++)
    {
 
        for(j=head[i];j!=0;j=edges[j].next) 
        {
            printf("%d-%d=%d\n",i,edges[j].to,edges[j].w);
        }
    }
}

 

http://www.lryc.cn/news/60432.html

相关文章:

  • 【剑指offer】常用的数据增强的方法
  • /lib/lsb/init-functions文件解析
  • 【ChatGPT】ChatGPT-5 强到什么地步?
  • [ARM+Linux] 基于全志h616外设开发笔记
  • 如何实现24小时客户服务
  • 查询数据库空间(mysql和oracle)
  • 为什么 SQLite 一定要用 C 语言来开发?
  • TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
  • 你的GPT跟ChatGPT可能只差了一个DPU
  • springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透
  • NumPy的应用-1
  • k8s的yaml文件中kind类型详解
  • 第三天:C语言控制结构
  • 访问若依vue版后端api接口
  • 另一种迁移xxl-job任务的方法,适合不满足数据迁移条件
  • Redis缓存穿透、击穿、雪崩面试题详解
  • 【网络安全】本地提权漏洞分析
  • 电脑端(PC)按键精灵——3.其他命令
  • Hudi集成Flink-写入方式
  • 深度探索list
  • QQuick-自绘
  • 【算法】【算法杂谈】已知[1,m]的等概率函数,求[1,n]的等概率函数
  • 【Python】Python中的列表,元组,字典
  • 分布式系统概念和设计-分布式对象和远程调用
  • 11-FastDFS
  • Word这样用,提高效率不加班
  • 【Linux】调试器---gdb的使用
  • MySQL数据库之表的增删改查(进阶)
  • Nginx从开始到结束,简单到小白都能懂哦
  • Qt——Qt控件之按钮-QDialogButtonBox对话框按钮盒子控件的使用总结(例程:自定义按钮)