floyd算法(C语言 邻接表)
来源:互联网 发布:python list get函数 编辑:程序博客网 时间:2024/05/21 01:51
综述
floyd算法用来求所有点之间的最短路径
对于ABCD四个顶点,用dis[n][n]表示任意两点距离
算法:
1、初始化两点距离,自己为0,无路径为1000
2、加入A点后,更新dis。
3、加入B,更新dis。因为上一步所有以A为一步中间点的dis已求完,所以这一步同时可求以B为中间点和以AB为中间点的dis
4、循环
三个循环里K就是加入的ABCD,i,j代表逐行逐列扫描,比较dis[I][k]+dis[k][j]与dis[i][j]的大小
数据结构
typedef struct Side//边{ int toVertex;//边指向的点 int data; struct side *next;}Side,*sLink;typedef struct Vertex//顶点{ int data; sLink first;//第一个边}Vertex,AdjList[20];typedef struct Graph//图{ AdjList adj;//顶点数组,注意不是指针,用.不用-> int n,v;//顶点数,边数}Graph,*gLink;
创建
void createGraph(gLink g){ int n,v,data; printf("请输入顶点数与边数"); scanf("%d %d",&n,&v); g->n = n; g->v = v; int i; for(i=0;i<n;i++) { printf("请输入顶点%d权值",i); scanf("%d",&data); g->adj[i].data = data; g->adj[i].first = NULL; } printf("请输入边信息"); int v1,v2,da; for(i=0;i<v;i++) { scanf("%d %d %d",&v1,&v2,&da); sLink s = (sLink)malloc(sizeof(Side)); s->toVertex = v2; s->next = g->adj[v1].first; g->adj[v1].first = s; s->data = da; }}
算法
int dis[15][15];void floyd(gLink g){ int i,j,k; //初始化 for(i=0;i<g->n;i++) { for(j=0;j<g->n;j++) { dis[i][j]=1000; } dis[i][i]=0; } for(i=0;i<g->n;i++) { sLink s = g->adj[i].first; while(s) { dis[i][s->toVertex]=s->data; s=s->next; } } //算法 for(k=0;k<g->n;k++)//把第K个点添加到中间点集合中 { for(i=0;i<g->n;i++)//逐行 { for(j=0;j<g->n;j++)//逐列 { if(dis[i][k]+dis[k][j]<dis[i][j])//i-->k-->j { dis[i][j] = dis[i][k]+dis[k][j]; } } } } //输出 for(i=0;i<g->n;i++) { for(j=0;j<g->n;j++) { printf("%-5d",dis[i][j]); } printf("\n"); }}
主函数
int main(){ gLink g = (gLink)malloc(sizeof(Graph)); createGraph(g); floyd(g); return 0;}
阅读全文
0 0
- floyd算法(C语言 邻接表)
- dijkstra算法(C语言 邻接表)
- 邻接表(c语言)
- Floyd算法C语言实现
- 邻接表:C语言实现
- Floyd算法——C语言实现
- POJ3275 FLOYD邻接表 [模板]
- 将图读进邻接表实现文件C语言
- 反转一个邻接表C语言
- C语言里面邻接表的创建
- 复习(数据结构):图:c语言:邻接表
- C语言邻接表的实现
- 拓扑排序(C语言 邻接表)
- 关键路径(C语言 邻接表)
- 邻接表实现PRIM算法(C++)
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- HDOJ 1874 畅通工程续(最短路径,dijkstra算法,spfa邻接表,floyd算法)
- HDOJ 1869 六度分离(最短路径,dijkstra算法,SPFA邻接表,floyd算法)
- JAVA基础(36) java中sleep()和wait()方法详解
- log文件的查看 tail -f aa.log 日志打印最新的
- Android 文本复制
- Unity Shader 参数学习记录
- SQLite_关于SQLite
- floyd算法(C语言 邻接表)
- android开发ndk调用第三方so库
- J2EE相关
- Unity3d热更新三
- Docker Win7 下的安装
- 关于$.post()没有执行完,就执行后面代码的处理方法
- linux系统新建用户、密码
- setParameters, failed
- ABP框架的多租户