频道栏目
首页 > 资讯 > 其他综合 > 正文

弗洛伊德变种算法计算最短路径

14-01-26        来源:[db:作者]  
收藏   我要投稿
这个算法和Dijkstra算法的区别在于;Dijkstra算法适用于大图,它能够指定到达某个点即停止计算;而这个算法则一般不能用于大图(时间过长),因为它必然是n的2次方次运算。

两个算法都是计算某一个点到其他各点的最短通路
弗洛伊德算法则是计算所有顶点对之间最短通路的长度

//弗洛伊德变种算法计算最短通路(更改,使其计算v0点到各点的最短通路)
// procedure Floyd(G:带权简单图)
//  {G有顶点v1.v2....vn和权}
// for i= 1 to n
//     for k= 1 to n
//       if d(v0,vi)+d(vi,vk)
using namespace std;
//012345分别表示v0 v1......
  int v;//////点数目
  int edge;///边数目
  int si=0;//si用来控制s数组的位置

int** draw();//绘图
void digui_shuchu(int k,int *huilu);//递归输出
int main(int argc, char const *argv[])
{
  int i;
  int**a=draw();
//------------------------------------------------------------------------//
  int* l=new int[v];//存放i点到0点的路径长度
  for ( i = 0; i < v; ++i)l[i]=32767;
//------------------------------------------------------------------------//
  int* huilu=new int[v];//存放i点的前一个合理点
  for ( i = 0; i < v; ++i)huilu[i]=-1;
//------------------------------------------------------------------------//
l[0]=0;
 int u;
  huilu[0]=0;
//------------------------------------------------------------------------//
  	for ( u = 0; u < v; ++u)
  	{
  		for ( i = 0; i < v; ++i)
  		{
         if (l[u]+a[u][i] < l[i])//lenth和路径将会改变
         {/////////////////////////////////////////更换i的所有数据            
           l[i]=l[u]+a[u][i];
           huilu[i]=u;
         }
  		}
  	}
  
  //------------------------------------------------------------------------//
	for(int f=0;f>v>>edge;///输入点数目和边数目
  int **a=new int*[v];
  for ( i = 0; i < v; ++i)
    a[i]=new int[v];
  for ( i = 0; i < v; ++i)
    for ( j = 0; j < v; ++j)
      a[i][j]=32767;

  int spot1,spot2,len;
  for ( i = 0; i < edge; ++i)
  {
    cin>>spot1>>spot2>>len;
    a[spot1][spot2]=len;    a[spot2][spot1]=len;
  }
///-------------------------------------------------------------///
    for ( i = 0; i < v; ++i){
    for ( j = 0; j < v; ++j)
      cout<

相关TAG标签
上一篇:POJ 1201 Intervals 差分约束
下一篇:2014年计算机二级考试Access上机试题及答案13
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站