【数据结构】图的经典算法

    • 1、Dijksra算法
  • 三、多源最短路径

    • 1、Floyd算法
  • 四、拓扑排序

一、最小生成树

==========================================================================

1、Prim算法


struct EdgeType{

int adjvex;

int lowcost;

}shortEdge[MAX_VERTEX_SIZE];

int minLow(EdgeType shortEdge,int n){

int k=0,min0=0x3f3f3f3f;

for(int i=0;i<n;i++){

if(min0>shortEdge[i].lowcost&&shortEdge[i].lowcost!=0){

k=i;

min0=shortEdge[i].lowcost;

}

}

}

void Prim(int v){

for(int i=0;i<vertexNum;i++){

shortEdge[i].adjvex=v;

shortEdge[i].lowcost=edge[v][i];

}

//起点加入到集合中

shortEdge[v].lowcost=0;

for(int i=0;i<vertxNum;i++){

int k=minLow(shortEdge,vertexNum);

cout<<k;

cout<<vertex[shortEdge[k].adjvex]<<“,”<<vertex[k]<<endl;

//将查找的点加入到集合中

shortEdge[k].lowcost=0;

for(int j=0;j<vertexNum-1;j++){

if(shortEdge[k].lowcost>edge[k][j])

shortEdge[j]=edge[k][j];

shortEdge[j].adjvex=k;

}

}

}

2、Kruscal算法


const int MAX_VERTEX_SIZE=20;

const int MAX_EDGE_SIZE=10;

struct EdgeType{

int from,to,weight;

}edgeSet[MAX_EDGE_SIZE];

int findRoot(int parent,int v){

int t=v;

while(parent[t]>-1)

t=parent[t];

return t;

}

void Kruscal(int v){

//按权重排序

sortEdge(edgeSet,edgeNum);

for(i:vertexNum)

parent[i]=-1;

for(int i=0,num=0;num<vertexNum-1;i++){

vertex1=findRoot(parent,edgeSet[i].from);

vertex2=findRoot(parent,edgeSet[i].to);

if(vertex1!=vertex2){

parent[vertex1]=vertex2;

cout<<vertex[edgeSet[i].from]<<" “<<vertex[edgeSet[i].to]<<”:"<<edgeSet[i].weight<<endl;

num++;

}

}

}

二、单源最短路径

===========================================================================

1、Dijksra算法


const int MAX_VERTX_SIZE=10;

int minLow(int dist[],int n){

int k=0,min0=0x3f3f3f3f;

for(int i=0;i<n;i++){

if(min0>dist[i]&&dist[i]!=0){

min0=dist[i];

k=i;

}

}

return k;

}

void Dijksra(int v){

int dist[MAX_VERTX_SIZE];

string path[MAX_VERTX_SIZE];

for(int i=0;i<vertexNum;i++){

dist[i]=edge[v][i];

if(dist[i]!=0x3f3f3f3f&&dist[i]!=0)

path[i]=vertex[v]+vertex[i];

}

for(int i=0;i<vertexNum-1;i++){

int k=minLow(dist,vertexNum);

for(int j=0;j<vertexNum;j++){

if(dist[i]>dist[k]+edge[k][i]){

dist[i]=dist[k]+edge[k][i];

path[i]=path[k]+vertex[i];

}

}

dist[k]=0;

}

}

三、多源最短路径

===========================================================================

1、Floyd算法


void Floyd{

int dist[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];

string path[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];

for(int i=0;i<vertexNum;i++){

for(int j=0;j<vertexNum;j++){

dist[i][j]=edge[i][j];

if(dist[i][j]!=0x3f3f3f3f&&i!=j)

path[i][j]=vertex[i]+vertex[j];

else

path[i][j]=“”;

}

}

for(int k=0;k<vertexNum;k++){

for(int i=0;i<vertexNum;i++){

for(int j=0;j<vertexNum;j++){

if(dist[i][j]>dist[i][k]+dist[k][j]){

dist[i][j]=dist[i][k]+dist[k][j];

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

部分内容:

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
vqk2C1V-1712730668592)]

[外链图片转存中…(img-DR5E07rG-1712730668592)]

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值