月球美容计划之图的储存结构汇总

2024-08-22 14:18

本文主要是介绍月球美容计划之图的储存结构汇总,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SJ图论很流弊,为了省赛队里知识尽量广,我就直接把图continue,现在回顾起来丫的全忘了,从头开始吧。

先写写图的存储,再写写最小生成树和最短路的几个经典算法,月球美容计划就可以结束了。0 0,拖了好久,还有很多内容要写。- -

这次总结了邻接矩阵,邻接表,十字链表,邻接多重表,边集数组,这5种常用的图的储存结构,也许能当模板用吧。

 

 

邻接矩阵

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//邻接矩阵
int G[100][100];
int add1 (int i,int j,int w)
{G[i][j] = w;return 0;
}int main()
{int i,n;//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);add1 (a,b,w);//无向图加上add1 (b,a,w);}return 0;
}


邻接表

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//邻接表struct dot
{int d;int w;struct dot *next;
};struct hed
{int v;struct dot *next;
}head[100];int add2(int i,int j,int w)
{struct dot * p;struct dot * t = new dot;t->d = j;t->w = w;t->next = NULL;if (head[i].next == NULL){head[i].next = t;return 0;}p = head[i].next;while (p->next != NULL)p = p->next;p->next = t;return 0;
}int main()
{int i,n;memset (head,0,sizeof (head));//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);add2 (a,b,w);//无向图加上add2 (b,a,w);}return 0;
}


十字链表(有向图好用)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//十字链表struct dot
{int d;int w;struct dot *next;
};struct hed
{int v;struct dot *to;struct dot *next;
}head[100];int add3(int i,int j,int w)
{struct dot * p;struct dot * t = new dot;t->d = j;t->w = w;t->next = NULL;//正邻接表构建if (head[i].next == NULL){head[i].next = t;}else{p = head[i].next;while (p->next != NULL)p = p->next;p->next = t;}//逆邻接表打十字if (head[i].to == NULL){head[i].to = t;return 0;}else{p = head[i].to;while (p->next != NULL)p = p->next;p->next = t;}return 0;
}int main()
{int i,n;memset (head,0,sizeof (head));//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);add3 (a,b,w);}return 0;
}


邻接多重表(无向图)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//邻接多重表(无向图)struct dot
{int i,j;int w;struct dot *inext;struct dot *jnext;
};struct hed
{int v;struct dot *next;
}head[100];int add4(int i,int j,int w)
{struct dot *t = new dot;struct dot *p = NULL,*tp = NULL;t->i = i;t->j = j;t->w = w;t->inext = NULL;t->jnext = NULL;if (head[i].next == NULL){head[i].next = t;}else{p = head[i].next;while (p != NULL){tp = p;if (p->i == i)p = p->inext;elsep = p->jnext;}if (tp->i == i)tp->inext = t;elsetp->jnext = t;}if (head[j].next == NULL){head[j].next = t;}else{p = head[j].next;while (p != NULL){tp = p;if (p->i == j)p = p->inext;elsep = p->jnext;}if (tp->i == j)tp->inext = t;elsetp->jnext = t;}return 0;
}int main()
{int i,n;memset (head,0,sizeof (head));//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);add4 (a,b,w);}return 0;
}

 

边集数组

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//边集数组struct e
{int i,j;int w;}eg[100];int cont;int add5(int i,int j,int w)
{eg[cont].i = i;eg[cont].j = j;eg[cont].w = w;return 0;
}int main()
{int i,n;memset (eg,0,sizeof (eg));cont = 0;//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);//有向图无向图皆可add5 (a,b,w);}return 0;
}


边集数组之前向星

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//前向星
int head[100];struct e
{int to;int fro;int w;
}eg[100];int cont;
int add6 (int i,int j,int w)
{eg[cont].to = j;eg[cont].fro = head[i];eg[cont].w = w;head[i] = cont++;return 0;
}int main()
{int i,n;memset (head,-1,sizeof (head));cont = 0;//建图scanf ("%d",&n);for (i = 0;i < n;i++){int a,b,w;//输入起点、终点、权重scanf ("%d%d%d",&a,&b,&w);add6 (a,b,w);//无向图加上add6 (b,a,w);}return 0;
}


这篇关于月球美容计划之图的储存结构汇总的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096513

相关文章

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel