- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构有向图最短距离
数据结构实验报告
图的最小路径查找
设计思路:最小路径的查找,在顶点处设一个存贮此点到始发点的最短距离,记为dist[i],初始化为1000,通过此值与弧的权值相加并于弧的指向节点的最短距离做比较,保留下较小的值。并保留下较小的这个路径片段,记为1。否则依旧是初始值零。
#includeiostream.h
#define MAX_VERTEX_NUM 10 // 最大顶点个数
//------------------------图的邻接表存储表示-----------------
typedef struct ArcNode {
int adjvex; // 该弧所指向的顶点的位置
struct ArcNode *nextarc; // 指向下一条弧的指针
int weight;
}ArcNode;
typedef struct VNode {
char data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的弧
}VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum; // 图的当前顶点数和弧数
}ALGraph;
//元素在图中的位置
int locateALG(ALGraph g,char v){
for(int i=0;ig.vexnum;i++){
if(g.vertices[i].data==v)
return i;}
return -1;}
(图的创建) void CreateADG(ALGraph g){
int i,j,k,l,q;
ArcNode *p;
char m,n;
char c;
cout请输入有向图的顶点数:;
cing.vexnum;
while(g.vexnumMAX_VERTEX_NUM){
cout请输入有向图的顶点数:;
cing.vexnum;}
i=g.vexnum*(g.vexnum-1);
cout请输入有向图的边数:;
cing.arcnum;
while(g.arcnumi){
cout请输入有向图的边数:;
cing.arcnum;}
cout请依次输入有向图的各个顶点:;
for(i=0;ig.vexnum;i++){//输入顶点信息
cinc;
l=locateALG(g,c);
if(l=0){
cout输入的顶点重复,请重新输入;
i--;
continue;}
g.vertices[i].data=c;
g.vertices[i].firstarc=NULL;}
for(k=0;kg.arcnum;k++){//输入边的信息
cout请输入第k+1条弧的起点与终点及权值:;
cinmnq;
i=locateALG(g,m);
j=locateALG(g,n);
if(i0||j0||i==j){
k--;
continue;}
p=new ArcNode;//建立结点
p-weight=q;
p-adjvex=j;
p-nextarc=g.vertices[i].firstarc;//顶点i的链表
g.vertices[i].firstarc=p;//添加到最左边
}
cout有向图的邻接表创建成功endl;}
void printGra(ALGraph g)
{
ArcNode *p;
int i;
cout图中有g.vexnum个顶点,g.arcnum条弧endl;
for(i=0;ig.vexnum;i++){
p=g.vertices[i].firstarc;
coutg.vertices[i].data ;
while(p){
coutg.vertices[i].data,g.vertices[p-adjvex].data p-weight ;
p=p-nextarc; }
cout\n;}
}
void shortpath(int s,ALGraph g,int disk[MAX_VERTEX_NUM],int p[MAX_VERTEX_NUM][MAX_VERTEX_NUM])
用Dijkstra算法求有向网g的s顶点到其余顶点的最短路径,及其带权长度disk[v] ,若p[i][j]为1,则j是从s到i当前求得最短路径上的顶点。
{ int set[MAX_VERTEX_NUM];
int i,j,k,n;
文档评论(0)