社区
C++ 语言
帖子详情
多段图的存储??
yan119760463
2008-11-13 12:44:45
多段图采用什么方式存储比较好访问 ??
求多段图原点到终点的的最短路径问题, 整个图有 段 点 边 权值 4个信息 怎样把它们都综合起来
比如这样的一个5段图(省略边)
第1段 2 3 4 5
点2 点5 点8
点1 点3 点6 点9 点10
点4 点7
我考虑了 关联容器 多维数组 很多方法 不过没找到方便的 哪位高手指点一下啊
...全文
202
7
打赏
收藏
多段图的存储??
多段图采用什么方式存储比较好访问 ?? 求多段图原点到终点的的最短路径问题, 整个图有 段 点 边 权值 4个信息 怎样把它们都综合起来 比如这样的一个5段图(省略边) 第1段 2 3 4 5 点2 点5 点8 点1 点3 点6 点9 点10 点4 点7 我考虑了 关联容器 多维数组 很多方法 不过没找到方便的 哪位高手指点一下啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
irisfly89
2008-11-16
打赏
举报
回复
这个程序是有问题的 不过思路是对的恩
irisfly89
2008-11-16
打赏
举报
回复
#include "stdio.h"
#include "conio.h"
#define n 6 /*图的顶点数*/
#define k 4 /*图的段数*/
#define MAX 1000
typedef int NodeNumber; /*节点编号*/
typedef int CostType; /*成本值类型*/
CostType cost[n][n];
NodeNumber path[k]; /*存储最短路径的数组*/
NodeNumber cur= -1;
void creatgraph(CostType *cost[n][n]) /*创建图的成本矩阵*/
{ int i,j;
printf("请输入图的成本矩阵:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&cost[i][j]);
}
void outgraph(CostType *cost[n][n]) /*输出图的成本矩阵*/
{ int i,j;
printf("输出图的成本矩阵:\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%d\t",cost[i][j]);
printf("\n");
}
}
/* 使用向前递推算法求多段图的最短路径 */
void FPath(CostType *cost[n][n],NodeNumber *path[k])
{ int i,j,length,temp,v[n],d[n];
for(i=0;i<n;i++) v[i]=0;
for(i=n-2;i>=0;i--)
{ for(length=MAX,j=i+1;j<=n-1;j++)
if(cost[i][j]>0 && (cost[i][j])+v[j]<length)
{length=cost[i][j]+v[j]; temp=j;}
v[i]=length;
d[i]=temp;
}
path[0]=0;
path[k-1]=n-1;
for(i=1;i<=k-2;i++) (path[i])=d[path[i-1]];
}
/* 使用向后递推算法求多段图的最短路径 */
void BPath(CostType *cost[n][n],NodeNumber *path[k])
{ int i,j,length,temp,v[n],d[n];
for(i=0;i<n;i++) v[i]=0;
for(i=1;i<=n-1;i++)
{ for(length=MAX,j=i-1;j>=0;j--)
if(cost[j][i]>0 && (cost[j][i])+v[j]<length)
{length=cost[j][i]+v[j]; temp=j;}
v[i]=length;
d[i]=temp;
}
path[0]=0;
path[k-1]=n-1;
for(i=k-2;i>=1;i--) (path[i])=d[path[i+1]];
}
/* 查找结点i的后向邻接结点 */
int findbackward(CostType *cost[n][n],NodeNumber i,NodeNumber cur)
{ int j;
for(j=cur+1;j<n;j++)
if(cost[i][j]>0) {cur=j;return j;}
return -1;
}
/* 查找结点i的前向邻接结点 */
int findforward(CostType *cost[n][n],NodeNumber i,NodeNumber cur)
{ int j;
for(j=cur+1;j<n;j++)
if(cost[j][i]>0) {cur=j;return j;}
return -1;
}
/* 输出最短路径序列 */
void outpath(NodeNumber *path[k])
{ int i;
for(i=0;i<k;i++)
printf("%d\t",path[i]);
}
main()
{
NodeNumber m,t;
creatgraph(&cost);
outgraph(&cost);
FPath(&cost,&path);
printf("输出使用向前递推算法后的最短路径:\n");
outpath(&path);
printf("\n输出使用向后递推算法后的最短路径:\n");
BPath(&cost,&path);
outpath(&path);
printf("\n输入要查找邻接结点的编号:");
scanf("%d",&t);
printf("结点 %d 的前向邻接结点为: \n");
cur=findforward(&cost,t,cur);
while(cur!=-1) /*找剩下的前向邻接结点*/
{ printf("%d\t",cur);cur=findforward(&cost,t,cur);}
printf("\n结点 %d 的后向邻接结点为:\n");
cur=findbackward(&cost,t,cur);
while(cur!=-1) /*找剩下的后向邻接结点*/
{ printf("%d\t",cur);cur=findbackward(&cost,t,cur);}
getch();
}
只能给你提供思路 具体的自己搞定拉
irisfly89
2008-11-16
打赏
举报
回复
其实你就是要动态多段数组把 恩我有 我正在写这个最小路径的算法实现
星羽
2008-11-13
打赏
举报
回复
其实应该说是 图, 如果你要存到文件什么的,可以用图的遍历
星羽
2008-11-13
打赏
举报
回复
用树吧,自己写
帅得不敢出门
2008-11-13
打赏
举报
回复
求最短路径就是用加权图的.
fengbangyue
2008-11-13
打赏
举报
回复
图,不是用二维数组吗,然后用图的遍历不就可以了
多段
图
的动态规划算法(C、C++)
本文介绍了在C++环境下,使用邻接表数据结构解决
多段
图
最短路径问题的动态规划算法。通过向前递推计算每个节点到汇点的最短路径,最终得出源点到汇点的最优解。算法遵循最优性原理,通过自底向上的方式计算最优解值。
算法设计与分析——
多段
图
的最短路径问题(Java)
文章介绍了
多段
图
的概念,其中顶点被分成多个互不相交的子集,每段内的顶点不邻接。通过动态规划方法证明了最短路径问题的最优性原理,并详细阐述了算法的填表过程和状态转移。接着,提供了一个Java程序来实现该算法,用于计算
多段
图
的最短路径及其长度。
多段
图
的最短路径
本文探讨了如何解决
多段
图
中从起始点v0到终止点的最短路径问题。通过分析问题的最优子结构,确定采用动态规划而非回溯法。算法分为三个步骤:初始化距离向量和前驱节点记录;从节点1开始,逐个检查前驱节点以更新最短路径;最后,输出最短路径。文中提供了C++实现,并附有运行截
图
。
C/C++分支限界法求
多段
图
最短路径问题
本文介绍了一种解决
多段
图
最短路径问题的分支限界法,通过合理设定限界函数,采用广度优先策略搜索解空间树,逐步逼近最优解。详细解释了求解步骤,并给出具体实例与完整代码实现。
算法设计之
多段
图
求最小成本问题
本文探讨了
多段
图
中的最小成本路径问题,通过递推公式和向前处理法求解,介绍了算法的核心思想和步骤,并提供了C++代码实现,展示了如何创建有向
图
、求解最小成本路径及其具体路径。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章