本文实例为大家分享了C语言实现Floyd算法的具体代码,供大家参考,具体内容如下
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define NUM 4 typedef struct MGraph /* 邻接表存储结构 */ { int edges[NUM][NUM]; int n,e; } MGraph; MGraph *build_mgraph(); void Floyd(MGraph *mgraph); void Ppath(int path[][NUM], int i, int j); void Dispath(int A[][NUM], int path[][NUM], int n); int main(void) { MGraph *mgraph; printf("\n*************************************************************\n"); printf("该图的矩阵表示为:\n"); mgraph=build_mgraph(); printf("\n*************************************************************\n"); printf("各顶点间最短路径为:\n"); Floyd(mgraph); printf("\n*************************************************************\n"); return 0; } MGraph *build_mgraph() { int i,j; int num_e=0; MGraph *mgraph=(MGraph *)malloc(sizeof(MGraph)); int matrix[NUM][NUM]={{0,5,INT_MAX,7}, {INT_MAX,0,4,2}, {3,3,0,2}, {INT_MAX,INT_MAX,1,0}}; for(i=0;i<NUM;i++) { for(j=0;j<NUM;j++) { mgraph->edges[i][j]=matrix[i][j]; if(matrix[i][j]!=0 && matrix[i][j]!=INT_MAX) num_e++; } } mgraph->n=NUM; mgraph->e=num_e; printf("node=%d;edges=%d\n",mgraph->n,mgraph->e); for(i=0;i<NUM;i++) { for(j=0;j<NUM;j++) { if(mgraph->edges[i][j]!=INT_MAX) printf("%3d",mgraph->edges[i][j]); else printf("%3c",'&'); } printf("\n"); } return mgraph; } void Floyd(MGraph *mgraph) { int A[NUM][NUM],path[NUM][NUM]; int i,j,k; for(i=0;i<mgraph->n;i++) { for(j=0;j<mgraph->n;j++) { A[i][j]=mgraph->edges[i][j]; path[i][j]=-1; } } for(k=0;k<mgraph->n;k++) { for(i=0;i<mgraph->n;i++) { for(j=0;j<mgraph->n;j++) { if(A[i][k]!=INT_MAX && A[k][j]!=INT_MAX && A[i][j]>A[i][k]+A[k][j]) { A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } } } Dispath(A,path,mgraph->n); } void Ppath(int path[][NUM], int i, int j) { int k; k=path[i][j]; if(k==-1) return; Ppath(path,i,k); printf("%d,",k); Ppath(path,k,j); } void Dispath(int A[][NUM], int path[][NUM], int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(A[i][j]==INT_MAX) printf("%d-%d have no path",i,j); printf("%d-%d-%d: ",i,j,A[i][j]); printf("%d,",i); Ppath(path,i,j); printf("%d\n",j); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍C语言实现K-Means算法,包括了C语言实现K-Means算法的使用技巧和注意事项,需要的朋友参考一下 一、聚类和聚类算法 聚类,就是将数据对象划分成若干个类,在同一个类中的对象具有较高的相似度,而不同的类相似度较小。聚类算法将数据集合进行划分,分成彼此相互联系的若干类,以此实现对数据的深入分析和数据价值挖掘的初步处理阶段。例如在现代商业领域,聚类分析算法可以从庞大的数据集合中对消
本文向大家介绍C语言实现冒泡排序算法,包括了C语言实现冒泡排序算法的使用技巧和注意事项,需要的朋友参考一下 BubblSort.c 以上所述就是本文的全部内容了,希望对大家学习C语言能够有所帮助。
本文向大家介绍C语言中K-means算法实现代码,包括了C语言中K-means算法实现代码的使用技巧和注意事项,需要的朋友参考一下 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。 算法过程如下: 1)从N个样本随机选取K个样本作为质心 2)对剩余的每
本文向大家介绍C语言实现字符串匹配KMP算法,包括了C语言实现字符串匹配KMP算法的使用技巧和注意事项,需要的朋友参考一下 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 下面的的KMP算法的解释步骤 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符
本文向大家介绍C语言实现图的搜索算法示例,包括了C语言实现图的搜索算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现图的搜索算法。分享给大家供大家参考,具体如下: 在游戏中,常常遇到路径规划问题,用到图的相关算法,我们以简单图来学习。 图通常有两种表示方式,矩阵和邻接表。矩阵表示简单,运算快,但当矩阵是稀疏矩阵的时候就存在空间浪费的问题,并且效率也会下降,而邻接表节约空间,
本文向大家介绍C语言实现的PNPoly算法代码例子,包括了C语言实现的PNPoly算法代码例子的使用技巧和注意事项,需要的朋友参考一下 写C语言的实验用到的一个算法,判断一个点是否在多边形的内部。C的代码如下: 其中nvert是多边形顶点的个数,vertx和verty分别是多边形顶点横、纵坐标的数组,textx和testy是待测点的坐标。这个算法是由W. Randolph Franklin提出的,
一、弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 基本思想 通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。
本文向大家介绍C语言实现的猴子偷桃之类算法,包括了C语言实现的猴子偷桃之类算法的使用技巧和注意事项,需要的朋友参考一下 C基础算法题 好多年没碰C了 很郁闷啊~ 以上所述就是本文的全部内容了,希望大家能够喜欢,再遇到这种弱智面试题能直接喷死面试官。