«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1405956
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]算法连载(5)--动态规划之allPath[转载]
既瑜(224499) 发表于 2005/4/15 11:54:42

1.问题描述:设G=(V,E)是一个有N个结点的有向图。又设C是G是成本邻接矩阵,其中C(i,i)=0,1<=i<=n;当<i,j>属于E(G)时,C(i,j)表示边<i,j>的成本;当i不等于j且<i,j>不属于E(G)时,C(i,j)等于无穷(用一个较大的数表示)。求出每对结点之间的最短路径。 2.设计思想与分析:    基本思路:首先决策哪个结点是该路径上的具有最大编号的中间结点K,然后就再去求取由I到K和由K到J这对结点间的最短路径,再把中间结点K记录下来。若是结点I,J间不用经过其他结点就能得到最短路径则把本身的成本保留下来,且不记录中间结点。 (本设计的遍历有问题,不能遍历经过2个结点的路径,一直没有修改。) #include <iostream.h>int const m=4; struct node{ int flag[m];  //用来记录每对结点最短路径要经过的结点 float cost;  //用来记录结点到结点的路径成本}; void all_paths(node COST[m][m],node A[m][m],int n){ int i,j,k;//复制带路径成本的邻接矩阵 for(i=0;i<n;i++)  for(j=0;j<n;j++)  {   A[i][j].cost=COST[i][j].cost;   for(k=0;k<n;k++)   A[i][j].flag[k]=0;  } //*运用动态规划的的部分,核心算法*//    for(k=0;k<n;k++)//对最高下标为K的结点的路径  {   for(i=0;i<n;i++)   //对于所有可能结点对       for(j=0;j<n;j++)    {     if(A[i][j].cost>(A[i][k].cost+A[k][j].cost))     {      A[i][j].cost=(A[i][k].cost+A[k][j].cost);      A[i][j].flag[k]=k+1;  //记录要经过的结点编号     }     else A[i][j].cost=A[i][j].cost;             }        }  for(i=0;i<n;i++) {  for(j=0;j<n;j++)  {       if(i!=j)   { if(A[i][j].cost==100)    cout<<i+1<<"号结点无法到达"<<j+1<<"号结点"<<endl;      else       {       cout<<i+1<<"号结点到"<<j+1<<"号结点的最小路径成本为:"<<A[i][j].cost<<endl;       cout<<"其路径为:"<<i+1<<"->";          for(k=0;k<n;k++)       {        if(A[i][j].flag[k]!=0)      cout<<A[i][j].flag[k]<<"->";       }       cout<<j+1<<endl<<endl;      }   }   else cout<<endl;  }   } } void main(){   cout<<"|--------每对结点之间的最短路径-------|"<<endl; cout<<"|---ower by zhanjiantao(028054115)---|"<<endl; cout<<"|-------------------------------------|"<<endl<<endl; cout<<"注意:请不要输入大于100的成本,本身到本身输入0,输入100表示无法到达"<<endl;   int i,j,n,k;   struct node COST[m][m];   struct node A[m][m];   while(k)   {  cout<<"结点总数为三个,请你构造这个图。"<<endl<<endl;   //cin>>n;  n=3;  for(i=0;i<n;i++)   for(j=0;j<n;j++)   {    cout<<"请输入"<<i+1<<"号结点到第"<<j+1<<"号结点的路径成本:";    cin>>COST[i][j].cost;   };   all_paths(COST,A,n);  cout<<"Press<1> to run again"<<endl;  cout<<"Press<0> to exit"<<endl;  cin>>k;   }}

阅读全文(2152) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144751898 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号