深入解析:高效编程的核心——数据结构详解

更新:11-13 现代故事 我要投稿 纠错 投诉

大家好,今天来为大家分享深入解析:高效编程的核心——数据结构详解的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

首先求出从源点到所有顶点的路径w(),并将到不能直接到达的顶点的路径设置为。找出这些路径()中长度最短的路径,并更新每条路径: 如果图中存在弧(),则w() + w() w(),将() 替换为路径(),并更新路径长度。在更新的路径中,找到长度最短的路径,以此类推,直到访问完所有顶点。时间复杂度:O()

C语言实现void Dijkstra(图G, int v){

//Visited数组用于表示该节点是否被访问过

int* 已访问=(int*)malloc(sizeof(int)*G-vexnum);

//距离数组用于表示起点到每个节点的最短距离

int* 距离=(int*)malloc(sizeof(int)*G-vexnum);

//Parent数组用于表示当前节点的前驱

int* 父级=(int*)malloc(sizeof(int)*G-vexnum);

for(int i=0; i G-vexnum; i++){//初始化三个数组

访问过[i]=0;

距离[i]=MAXINT;

父级[i]=-1;

}

访问过[v]=1;

距离[v]=0;

父级[v]=-2; //起点父节点设置为-2

int 访问次数=1, cur=v; //设置当前节点为v

while(visitednum G-vexnum){

//更新

for(int i=0; i G-vexnum; i++){//如果起点到当前节点的距离与边权重之和小于到本节点的距离,则更新

if(Visited[i]==0 (G-arcs[cur][i] + 距离[cur] 距离[i])){

距离[i]=G-arcs[cur][i] + 距离[cur];

父级[i]=cur;

}

}

//扫描

int 最小值=MAXINT,添加=-1;

for(int i=0; i G-vexnum; i++){//在未访问过的节点中找到距离最小的节点

if(访问[i]==0 距离[i]最小值){

最小值=距离[i];

添加=我;

}

}

//添加

Visited[add]=1;//设置未访问节点中距离最小的节点为已访问

visitnum++;//更新访问过的节点数

当前=添加;

}

for(int i=0; i G-vexnum; i++){//打印最短距离

printf("%d", 距离[i]);

}

printf("n");

for(int i=0; i G-vexnum; i++){//打印父节点信息

printf("%d", 父级[i]);

}

}

Floyd算法

算法思想从到的所有可能路径中逐一测试每个顶点,选择算法流程长度最短的路径。初始设一个n阶距离方阵,令其对角线元素为0,如果有弧,则对应元素为权重,否则为无穷大。逐渐尝试向原始直接路径添加中间顶点。如果添加中间顶点后路径变短,请修改它。否则,维持原值。测试完所有顶点后,算法结束。即对于图中每个顶点,检查w()+w()的长度是否小于w()。如果小于,则更新距离矩阵。时间复杂度:O()

C语言实现无效弗洛伊德(图G){

//分配空间

int** 距离=(int**)malloc(sizeof(int*)*G-vexnum);

for(int i=0; i G-vexnum; i++)距离[i]=(int*)malloc(sizeof(int)*G-vexnum);

int** 源=(int**)malloc(sizeof(int*)*G-vexnum);

for(int i=0; i G-vexnum; i++)Source[i]=(int*)malloc(sizeof(int)*G-vexnum);

for(int i=0; i G-vexnum; i++){

for(int j=0; j G-vexnum; j++){

距离[i][j]=G-arcs[i][j];

if(i !=j)Source[i][j]=j;

否则源[i][j]=-1;

}

}

//算法体

for(int k=0; k G-vexnum; k++){

for(int i=0; i G-vexnum; i++){

for(int j=0; j G-vexnum; j++){

if(距离[i][k] + 距离[k][j] 距离[i][j]){

距离[i][j]=距离[i][k] + 距离[k][j];

源[i][j]=源[i][k];

}

}

}

}

//打印距离矩阵

printf("距离矩阵:n");

for(int i=0; i G-vexnum; i++){

for(int j=0; j G-vexnum; j++){

printf("%5d", 距离[i][j]);

}

printf("n");

}

//打印路径矩阵

printf("源矩阵:n");

for(int i=0; i G-vexnum; i++){

for(int j=0; j G-vexnum; j++){

printf("%5d", Source[i][j]);

}

printf("n");

}

//释放空间

for(int i=0; i G-vexnum; i++){

自由(距离[i]);

免费(来源[i]);

}

自由(距离);

关于深入解析:高效编程的核心——数据结构详解和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

用户评论

空谷幽兰

真沒想到數據結構這麼重要!

    有14位网友表示赞同!

容纳我ii

學了數據結構以後,寫程式真的比較快了。

    有6位网友表示赞同!

孤廖

我以前覺得數據結構很抽象,現在才了解它的實用性

    有15位网友表示赞同!

厌归人

打算學習一下不同的數據結構類型,像是堆和圖啊。

    有11位网友表示赞同!

寂莫

想了解更多關於高效算法的知識,好像跟數據結構有密不可分的關系?

    有20位网友表示赞同!

我家的爱豆是怪比i

難怪每次考試裡都出現數據構造題,它真是一個關鍵的概念!

    有12位网友表示赞同!

余温散尽ぺ

感覺數據結構是程式設計的基礎,一定要牢固掌握。

    有13位网友表示赞同!

凉凉凉”凉但是人心

最近在研究資料庫系統,發現數據結構在這裡應用得非常廣泛。

    有14位网友表示赞同!

烬陌袅

聽說有一些特殊數據結構專門用於人工智慧領域。

    有16位网友表示赞同!

放肆丶小侽人

覺得學習一個新的數據結構就像解開了一個新的程式設計工具!

    有12位网友表示赞同!

没过试用期的爱~

希望學到一些實用的數據结构演算法知識,可以幫助我更有效率地解決問題。

    有20位网友表示赞同!

■孤独像过不去的桥≈

以前只知道陣列和 linked list,現在想拓展更多的學科知識!

    有20位网友表示赞同!

歆久

好像每個程式設計語言都有自己專屬的數據結構類型?

    有14位网友表示赞同!

煮酒

感覺學習數據結構是一趟很有趣的探索之旅!

    有17位网友表示赞同!

十言i

想要了解如何在实际编程中运用不同的数据结构。

    有10位网友表示赞同!

烟雨萌萌

最近在做些需要用到複雜算法的任務,可能要研究一下新的資料結構。

    有13位网友表示赞同!

三年约

覺得学习数据结构可以提升我解决问题的思维能力!

    有19位网友表示赞同!

余笙南吟

希望找到一些學習數據結構的好資源和教程!

    有20位网友表示赞同!

败类

真想多了解一點關於數據結構的歷史發展以及演變!

    有7位网友表示赞同!

【深入解析:高效编程的核心——数据结构详解】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:《减肥秘诀全解析》——揭秘轻松瘦身必读指南 下一篇:企业网络营销的关键作用及重要性解析