图的中心点Floyd算法实现
2014-11-11 14:46
218 查看
#include <iostream> using namespace std; #define MAX_V 100 //定义最大顶点个数 #define INF 10000 //表示正无穷 typedef struct MGraph//图的定义 { //int matrix[MAX_V][MAX_V];//邻接矩阵,带权值可存权值如下 int weight[MAX_V][MAX_V];//存放权值矩阵 int v;//顶点数 int e;//边数 int vertax[MAX_V];//存放顶点信息 };//图的邻接矩阵类型 void CreateMGragh(MGraph *G) { int i,j,m,weight; cout << "请输入顶点数和边数:" << endl; cin >> G->v >> G->e ; cout << "请输入顶点信息:" << endl; for (i=1;i<=G->v;i++) scanf("%d",&G->vertax[i]);//输入顶点信息,建立顶点表 for (i=1;i<=G->v;i++)//初始化权值矩阵 for (j=1;j<=G->v;j++) G->weight[i][j]=INF;//让所有权值不存在 for(i=1;i<=G->v;i++)//是结点自身指向自身权值为0 for(j=1;j<=G->v;j++) if(i==j) G->weight[i][j]=0; cout << "输入每条有向边的首尾顶点序号及权值:" << endl; for (m=0;m<G->e;m++) { cin >> i >> j >> weight; G->weight[i][j]=weight; } } void DisplayMGragh_W(MGraph *G)//输出权值矩阵G { int i,j; for(i=1;i<=G->v;i++) { for(j=1;j<=G->v;j++) printf("%8d",G->weight[i][j]); printf("\n"); } } void DisplayArray(MGraph *G,int Shortest[MAX_V][MAX_V])//输出最短路径矩阵 { int i,j; for(i=1;i<=G->v;i++) { for(j=1;j<=G->v;j++) printf("%8d",Shortest[i][j]); printf("\n"); } } void Floyd(MGraph *G,int Shortest[MAX_V][MAX_V]) { int i,j,k; for(i=1;i<=G->v;i++) for(j=1;j<=G->v;j++) Shortest[i][j]=G->weight[i][j]; for(k=1;k<=G->v;k++) for(i=1;i<=G->v;i++) for(j=1;j<=G->v;j++) if(Shortest[i][k]+Shortest[k][j]<Shortest[i][j]) Shortest[i][j]=Shortest[i][k]+Shortest[k][j]; } void MaxArray(int MAX[MAX_V],int Shortest[MAX_V][MAX_V],int v) { int i,j; for(i=1;i<=v;i++) { for(j=1;j<=v;j++) { if((MAX[i]<Shortest[j][i])&&(Shortest[j][i]!=INF)) MAX[i]=Shortest[j][i]; if(Shortest[j][i]==INF) { MAX[i]=INF; break; } } } for(i=1;i<=v;i++) printf("%d ",MAX[i]); printf("\n"); } void MinPath(int MAX[MAX_V],int v) { int i; int min=INF,flag=0; for(i=1;i<=v;i++) if(min>MAX[i]) { min = MAX[i]; flag = i; } cout << "中心点为:" << flag <<" "<<"最小偏心度为:" << min <<endl; } int main() { struct MGraph *G; G = new MGraph; int Shortest[MAX_V][MAX_V]; int MAX[MAX_V]; memset(MAX,0,MAX_V); int v,i,min; CreateMGragh(G); v=G->v; DisplayMGragh_W(G); cout << endl; Floyd(G,Shortest); DisplayArray(G,Shortest); MaxArray(MAX,Shortest,v); MinPath(MAX,v); delete G; return 0; }
相关文章推荐
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- Ebanswers CRM全面实现呼叫中心真正价值
- 分布式系统用户统一认证浅析(一)--认证中心被动认证实现
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- [转]完善的资产管理:实现以可靠性为中心的维护管理
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- 分布式系统用户统一认证浅析(二)认证中心主动认证实现
- 一个坐标点围绕任意中心点旋转--C#实现
- Adhesive框架系列文章--应用程序信息中心模块实现
- newxy+struts实现零java代码或极少java代码开发以数据为中心的web运用系统 作者:胡立新
- Java实现Floyd算法
- 以用户为中心的SNS站点数据库设计及实现
- Java实现"最短路径FLOYD算法”
- 在WPF里面实现以鼠标位置为中心缩放移动图片
- JSP+JAVABEAN两层模开发式(新闻中心模块的实现)
- 基于GPS 和GSM的农场短信中心的设计与实现
- 基于SBO的通用成本中心的技术实现
- hdu 1874 畅通工程续(最短路的dijkstra算法实现&&Floyd算法实现)
- 实现SharePoint2010企业内容管理资源中心
- java实现的floyd算法