弗洛伊德算法计算所有顶点对之间最短通路的长度

来源:互联网 发布:java tempfile 编辑:程序博客网 时间:2024/05/18 00:16
//弗洛伊德算法计算所有顶点对之间最短通路的长度// procedure Floyd(G:带权简单图)//  {G有顶点v1.v2....vn和权}// for i= 1 to n///  for j= 1 to n//     d(vi,vj)=w(i,j)//// for i= 1 to n///  for j= 1 to n//     for k= 1 to n//       if d(vj,vi)+d(vi,vk)<d(vj,vk)//        then d(vj,vk) = d(vj,vi)+d(vi,vk)// d(vi,vj)是在vi到vj之间的最短通路//这个算法是计算所有顶点对之间最短通路的长度//具体实现,应该要用到保存所有顶点对之间最短通路的长度的存贮单位(这里使用了二维数组存贮)/*粘贴输入下列测试数据  6 90 1 40 2 21 2 11 3 52 3 82 4 103 4 23 5 64 5 3'''''''''''''''''''''''''''''''''''''''''''''''''0 4 2 32767 32767 327674 0 1 5 32767 327672 1 0 8 10 3276732767 5 8 0 2 632767 32767 10 2 0 332767 32767 32767 6 3 00 ,0:00 ,1:30 ,2:20 ,3:80 ,4:100 ,5:131 ,1:01 ,2:11 ,3:51 ,4:71 ,5:102 ,2:02 ,3:62 ,4:82 ,5:113 ,3:03 ,4:23 ,5:54 ,4:04 ,5:35 ,5:0Press any key to continue*/#include <iostream>using namespace std;//012345分别表示v0 v1......  int v;//////点数目  int edge;///边数目int** draw(int ** &l);//绘图void shuchu(int **l);//输出int main(int argc, char const *argv[]){   int **l;  int**a=draw(l);//------------------------------------------------------------------------////------------------------------------------------------------------------//  int i,j,k;  for ( i = 0; i < v; ++i)  for ( j = 0; j < v; ++j)  for (k = 0; k < v; ++k)             if (l[j][i] + l[i][k] < l[j][k]) l[j][k] = l[j][i] + l[i][k];   //------------------------------------------------------------------------//  shuchu(l);  return 0;}int** draw(int ** &l)//绘图{  int i,j;  cin>>v>>edge;///输入点数目和边数目  int **a=new int*[v];  for ( i = 0; i < v; ++i)    a[i]=new int[v];  l=new int*[v];   for ( i = 0; i < v; ++i)     l[i]=new int[v];  for ( i = 0; i < v; ++i)    for ( j = 0; j < v; ++j)      {if(i==j){a[i][j]=0;l[i][j]=0;continue;}a[i][j]=32767;l[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;     l[spot1][spot2]=len;    l[spot2][spot1]=len;  }///-------------------------------------------------------------///    for ( i = 0; i < v; ++i){    for ( j = 0; j < v; ++j)      cout<<a[i][j]<<" ";    cout<<"\n";    }    cout<<"\n";  return a;}void shuchu(int **l){int i,j;   for ( i = 0; i < v; ++i)      for ( j = i; j < v; ++j)        cout<<i<<" ,"<<j<<":"<<l[i][j]<<"\n";}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 钉钉请假未审批怎么办 员工事假+工作履责怎么办 员工请事假不批怎么办 哺乳起员工一直请事假怎么办 请公休公司不批怎么办 辞职信交了不批怎么办 辞职年假没有休完怎么办 病假算旷工我该怎么办 辞职信领导不批怎么办 软顶帽子踏顶了怎么办 戴草帽总往下掉怎么办 白鞋子低帮发黄怎么办 跳伞的时候降落伞打不开怎么办 收腹裤穿着总是往下卷怎么办? 结婚打了黑伞怎么办 酷派x7开不了机怎么办 脸书账号被禁用怎么办 文档变成了d盘怎么办? 派派背包满了怎么办 黑裤子掉颜色了怎么办 快递被别人领走怎么办 绒面靴子长霉了怎么办 新买的鞋子开胶怎么办 白色的皮鞋边发黄怎么办 新鞋大拇指顶脚怎么办 耐克标志开胶了怎么办 鞋开胶了怎么办不用胶 gta按home没反应怎么办 gta5线上车没了怎么办 吃了粘壳的鸡蛋怎么办 gta5短信删错了怎么办 电风扇2档3档开好关不管用怎么办 gta5把车替换了怎么办 gta5任务完成后卡了怎么办 gta5车被扣押了怎么办 侠盗猎车手5卡怎么办 英雄联盟转区后没法快捷施法怎么办 欠太多人的钱怎么办 我欠了很多钱怎么办 输了那么多钱我该怎么办 家里欠了钱我该怎么办