大数据结构基本算法演示程序附源码Word格式文档下载.docx
- 文档编号:17363067
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:22
- 大小:114.41KB
大数据结构基本算法演示程序附源码Word格式文档下载.docx
《大数据结构基本算法演示程序附源码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大数据结构基本算法演示程序附源码Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
structAMGraphp
{
VerTexTypevexs[MVNum];
//顶点表
ArcTypearcs[MVNum][MVNum];
//邻接矩阵
intvexnum,arcnum;
//图的当前点数和边数
};
//Prim算法辅助结构体
structclose
VerTexTypeadjvex;
ArcTypelowcost;
#defineMaxInt32767//极大值
#defineMVNum100//最大顶点数
typedefcharVerTexType;
//顶点类型为字符型
typedefintArcType;
//边的权值为整型
structAMGraphk
//kruskal算法辅助结构体
structEdge
VerTexTypeHead;
VerTexTypeTail;
intD[100][100],Path[100][100];
structAMGraphf
intS[100],D[100],min,Path[100];
structAMGraphd
函数曾今调用关系
4.详细设计
Head.h
#pragmaonce
#include<
iostream>
string>
usingnamespacestd;
//图的邻接矩阵存储表示
voidprim();
voidkruskal();
voiddijkstra();
voidfloyd();
Main.cpp
#include"
head.h"
voidmain()
inta=1;
cout<
<
"
请输入想要运行的算法序号:
"
endl;
1、prim算法"
2、kruskal算法"
<
endl;
3、dijkstra算法"
4、floyd算法"
while(a!
=0)
{
cout<
请输入:
;
cin>
>
a;
switch(a)
{
case1:
prim();
break;
case2:
kruskal();
case3:
dijkstra();
case4:
floyd();
}
}
}
Prim.cpp
intLocateVex(AMGraphpG,VerTexTypeu)
inti=0;
while(G.vexs[i]!
=u)i++;
returni;
//使用邻接矩阵表示法创建无向图
intCreateUDN(AMGraphp&
G)
inti,j,k,w;
charv1,v2;
输入顶点数和边数:
cin>
G.vexnum>
G.arcnum;
//输入总顶点数,总边数
for(i=0;
i<
G.vexnum;
++i)//依次输入点的信息
输入第"
i+1;
顶点信息:
G.vexs[i];
++i)//权值初始化为最大值
for(j=0;
j<
++j)
G.arcs[i][j]=MaxInt;
for(k=0;
k<
++k)//构造邻接矩阵
输入边的两点信息:
//输入两点信息
v1>
v2;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
输入权值:
//输入权值
w;
G.arcs[i][j]=w;
G.arcs[j][i]=G.arcs[i][j];
return0;
//Prim算法最小生成树的构造
voidMinispanTree_prim(AMGraphpG,inta,AMGraphp&
T)
intk=a-1,i,j,m,lowcost;
//规定从第a个顶点开始
closeclosedge[100];
//辅助数组的声明
T.vexnum=G.vexnum;
//T的初始化
i<
G.vexnum;
i++)
T.vexs[i]=G.vexs[i];
j<
j++)
T.arcs[i][j]=-1;
closedge[i].adjvex=k;
closedge[i].lowcost=G.arcs[k][i];
closedge[k].lowcost=0;
//把第0个结点并入最小生成树
for(m=1;
m<
m++)
lowcost=MaxInt;
for(i=1;
if(lowcost>
closedge[i].lowcost&
&
closedge[i].lowcost!
=0&
closedge[i].lowcost!
=-1)
{
lowcost=closedge[i].lowcost;
k=i;
}
T.arcs[closedge[k].adjvex][k]=lowcost;
//在T中存最小生成树的边
T.arcs[k][closedge[k].adjvex]=lowcost;
closedge[k].lowcost=0;
//把第k个结点并入最小生成树
if((G.arcs[k][i]<
G.arcs[k][i]!
=-1)||closedge[i].lowcost==-1)
closedge[i].lowcost=G.arcs[k][i];
closedge[i].adjvex=k;
//邻接矩阵输出
voidAMGout(AMGraphpT)
inti,j,k;
点的信息分别为:
T.vexnum;
T.vexs[i]<
邻接矩阵为:
for(j=0;
j++)
for(k=0;
k++)
if(T.arcs[j][k]>
=32767||T.arcs[j][k]<
0)
cout<
*"
else
T.arcs[j][k]<
}
}
//调用函数
voidprim()
AMGraphpM;
AMGraphpN;
CreateUDN(M);
AMGout(M);
inta;
请输入开始的点:
MinispanTree_prim(M,a,N);
最小生成树为:
AMGout(N);
Kruskal.cpp
//顶点定位
intLocateVex(AMGraphkG,VerTexTypeu)
//创建无向图
intCreateUD(AMGraphk&
inti,j,k,w;
i+1;
G.arcs[i][j]=MaxInt;
intVexset[MVNum];
voidkruskal()
Edgea[100];
AMGraphkG;
CreateUD(G);
inti,j,k=0;
for(j=i+1;
if(G.arcs[i][j]>
0&
G.arcs[i][j]<
MaxInt)
a[k].Head=G.vexs[i];
a[k].Tail=G.vexs[j];
a[k].lowcost=G.arcs[i][j];
k++;
intv1,v2,vs1,vs2;
Edgeb;
if(a[i].lowcost>
a[j].lowcost)
b=a[i];
a[i]=a[j];
a[j]=b;
Vexset[i]=i;
v1=LocateVex(G,a[i].Head);
v2=LocateVex(G,a[i].Tail);
vs1=Vexset[v1];
vs2=Vexset[v2];
if(vs1!
=vs2)
cout<
a[i].Head<
a[i].Tail<
for(j=0;
if(Vexset[j]==vs2)
Vexset[j]=vs1;
Dijkstra.cpp
intLocateVex(AMGraphdG,VerTexTypeu)
intCreateUD(AMGraphd&
voiddijkstra()
AMGraphdG;
inti,n,v,v0,w;
请输入起始点:
v0;
v0=v0-1;
n=G.vexnum;
for(v=0;
v<
n;
v++)
S[v]=false;
D[v]=G.arcs[v0][v];
if(D[v]<
MaxInt)
Path[v]=0;
else
Path[v]=-1;
S[v0]=true;
D[v0]=0;
for(i=1;
min=MaxInt;
for(w=0;
w<
w++)
if(!
S[w]&
D[w]<
min)
v=w;
min=D[w];
S[v]=true;
(D[v]+G.arcs[v][w]<
D[w]))
D[w]=D[v]+G.arcs[v][w];
Path[w]=v;
intx=0;
点到各点的最短路径长度"
while(S[x])
D[x]<
;
x++;
x=0;
各终点的前驱点"
Path[x]+1<
Floyd.cpp
intLocateVex(AMGraphfG,VerTexTypeu)
intCreateUD(AMGraphf&
voidfloy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 基本 算法 演示 程序 源码