网站首页
手机版

最短路径算法程序

更新时间:2006-12-31 17:33:11作者:佚名

最短路径算法

一、             程序清单:

#include"iostream.h"

#include"stdlib.h"

#define MAXPOINT  4//定义最大的顶点数目

 

#define limit  99999   //设置没有路径的权代替无穷大

 

struct record{          //没个顶点的数据结构设置为一个数组队列

int number;  //顶点号

int flag;    //标志是否从队列中被选过如果为1表示选过为0表示未选

int allpath;  //从源点到这个点的当前最短距离(权最小)

}path[MAXPOINT+1];  

 

int cost[MAXPOINT+1][MAXPOINT+1];  //用来表示图的邻接矩阵

 

void main()

{int  i,j,temp,front=1,rear=MAXPOINT,N,minnumber;

//temp表示在数组队列中的当前下标 front表示队列首 rear表示队列尾

//N 表示待输入的源点号码 minnumber 表示选中的点的号码

int  min=99999;           //设置一个初始值

for(i=1;i<=MAXPOINT;i++)

for(j=1;j<=MAXPOINT;j++)

{cout<<"请输入从第"<<i<<"点到第"<<j<<"点的路径长度()如果没有路径的话请输入'99999'  "<<endl;

  cin>>cost[i][j];        //初始化所有点之间的(权)路径值

}

 

 

//cout<<"请输入源点号"<<endl; //输入一个起点

//cin>>N;

 

for(N=MAXPOINT;N>=1;N--)//把每一个点轮流地都设置为起点,可以求出任意一对顶点之间的最短路径

 

{ for(i=front;i<=rear;i++) //初始化每个点的信息

{if(i==N)

     path[i].allpath=0;

  else

   path[i].allpath=limit;

  path[i].flag=0;           

  path[i].number=i;

}

 

  while(rear>=1)    //控制循环次数

  {for(temp=front;temp<=MAXPOINT;temp++)

  {   if(path[temp].allpath<min&&path[temp].flag==0)//选出一个具有最值

//的点

     

  {  minnumber=path[temp].number;

           min=path[temp].allpath ;

  }

       

  }

   min=99999;

 

  path[minnumber].flag=1;//把选中的点的标志变量置1表示已经被选过避免选中

 

 

   for(i=1;i<=MAXPOINT;i++)//进行类似广度优先搜索,更新最短路径

   {if((i!=minnumber)&&(path[minnumber].allpath+cost[minnumber][i]<path[i].allpath))

      path[i].allpath=path[minnumber].allpath+cost[minnumber][i];

   }

 

   rear--;//次数减1

  }

rear=MAXPOINT; //恢复数组以便于下一点的循环

for(j=1;j<=MAXPOINT;j++)

{ cout<<""<<N<<"点到第"<<j<<"点的最短路径长度(权)为";

cout<<path[j].allpath <<endl;

}

 

}

 

}

二、        程序截图

 

本文标签:

为您推荐

FOXPRO在三峡工程信息管理中的应用

三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用MIS系统对信息进行收集、整理、存储、统计、分析、制表。几年来,我们先后用FOXBASE、FOXPRO编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统

2011-11-09 16:03

论信息技术在外语教学中的应用

随着信息技术的发展, 计算机多媒体技术和网络被广泛地应用在外语教学中, 改变了传统外语教学模式。现代化外语教学提高了外语教学水平, 从而培养高素质的外语人才, 满足日益增长的社会需求。

2011-11-09 16:02

对计算科学与计算机发展的思考

本文从什么是计算说起, 通过对计算机的发展历史和人类对计算本质认识的回顾, 提出量子计算系统的发展和成熟, 并且提出了人类认识未知世界的规律:“计算工具不断发展—整体思维能力的不断增强—公理系统的不断扩大—旧的神谕被解决—新的神谕不断产生”不断循环。

2011-11-09 16:01

试析高职院校计算机专业教学的改革

提高高职院校计算机专业的教学水平,是高职院校计算机教育工作者应该深入思考的问题。通过分析高职院校计算机专业教育的教学特点,从如何培养计算机应用型人才的角度出发,对高职计算机专业教学中存在的不足进行了总结,并提出了几点改革设想。

2011-11-09 16:00

水利工程计算机应用现状与思考

水利水电工程地质又是所有这些不同行业的工程地质专业中涉及面最广声望最高问题最复杂任务最艰巨的专业,这是众所周知毋庸置疑的。水利工程计算机应用具有广阔的发展前景,无论是数值计算、数据库应用,还是专家系统、网络系统,都大有用武之地;特别是工程地质制图(主

2011-11-09 15:59

论高职计算机应用专业课程优化与整合

课程体系是教育教学目标实现的重要保证,高职计算机应用专业课程体系要以为社会培养计算机应用性专门人才这一根本任务而进行设计,本文对计算机应用专业课程设置进行一定的探讨。

2011-11-09 15:58

加载中...