Floyd算法学习(最短路径)
来源:互联网 发布:php网站数据库在哪里 编辑:程序博客网 时间:2024/05/16 00:39
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100#define MAXCOST 99typedef struct{ int vertex[MAXSIZE]; int edges[MAXSIZE][MAXSIZE];} MyGraph;void GrarhPrint(MyGraph*g,int n);void CreateMGraph(MyGraph*g,int e,int n);void Floyd(MyGraph*g,int n);void Ppath(int path[][MAXSIZE],int i,int j);void Dispath(int A[][MAXSIZE],int path[][MAXSIZE],int n);int main(){ MyGraph *g=(MyGraph*)malloc(sizeof(MyGraph)); CreateMGraph(g,10,6); Floyd(g,6); return 0;}void CreateMGraph(MyGraph*g, int e,//边数 int n //顶点数 ){ int i,j,k,m; printf("Input data of vertex(0~n-1):\n"); for(i=0; i<n; i++) { g->vertex[i]=i; //把顶点0~n-1保存的数组中 } //对顶点初始化,该开始都是没有通路 for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(i==j) g->edges[i][j]=0; else g->edges[i][j]=MAXCOST;//99为不通 } } //输入通路,并确定边的权值 for(k=0; k<e; k++) { printf("Input edge of(i,j) and edge of size:"); scanf("%d%d%d",&i,&j,&m); g->edges[i][j]=m; } GrarhPrint(g,n);}//输出图void GrarhPrint(MyGraph*g,int n){ int i=0; int j=0; for(i=0; i<n; i++) { for(j=0; j<n; j++) if(g->edges[i][j]==MAXCOST||i==j) printf("∞\t"); else printf("%d\t",g->edges[i][j]);//这里输入的是哪两个点之间有路径 printf("\n"); }}void Floyd(MyGraph*g,int n){ int A[MAXSIZE][MAXSIZE],path[MAXSIZE][MAXSIZE]; int i,j,k; for(j=0;j<n;j++)//初始化 { for(i=0;i<n;++i) { A[i][j]=g->edges[i][j]; path[i][j]=-1; } } for(k=0;k<n;k++) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(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,n);}void Ppath(int path[][MAXSIZE],int i,int j){ int k; k=path[i][j]; if(k!=-1)//顶点Vk不是起点 { Ppath(path,i,k);//找顶点Vi的前一个顶点Vk printf("%d,",k);//输出顶点Vk的序号k Ppath(path,k,j);//找顶点Vk的前一个顶点 Vj }}void Dispath(int A[][MAXSIZE],int path[][MAXSIZE],int n){ //输出最短路径 int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(A[i][j]==MAXCOST)//MAXCOST表示没有通路 { if(i!=j) printf("从%d到%d没有路径!\n",i,j); } else { printf("从%d到%d的路径长度:%d,路径:",i,j,A[i][j]); printf("%d,",i);//输出路径上的起点序号i Ppath(path,i,j);//输出路径上的各中间点序号 printf("%d\n",j);//输出路径上的终点序号 } } }}
阅读全文
0 0
- Floyd算法学习(最短路径)
- 最短路径算法(floyd算法)
- floyd算法(最短路径)
- Floyd算法(最短路径)
- Floyd算法(最短路径)
- 最短路径--弗洛伊德(Floyd)算法
- 最短路径(Floyd算法)
- poj2240(最短路径 Floyd算法)
- 最短路径问题(Floyd算法)
- Risk(最短路径Floyd算法)
- 最短路径问题(floyd算法)
- 最短路径算法----floyd(转)
- 最短路径算法----floyd(转)
- Floyd最短路径算法
- 最短路径(Floyd算法)
- 最短路径 floyd算法
- 最短路径--Floyd算法
- Floyd最短路径算法
- The Designer
- 笔记
- [2017-08-19 17:02:13
- HTTP状态码详解
- POJ 3233Matrix Power Series
- Floyd算法学习(最短路径)
- Graph Of Zhuper
- Bluez D-BUS API应用参考资源
- HDU 6152
- Lock与synchronized 的区别
- Ned的难题
- C#_初学者基础语法
- Java集合归纳-<二>Set
- ACM暑假训练日记 17.8.19