遍历生成树邻接表邻接矩阵Word格式.docx
《遍历生成树邻接表邻接矩阵Word格式.docx》由会员分享,可在线阅读,更多相关《遍历生成树邻接表邻接矩阵Word格式.docx(58页珍藏版)》请在冰豆网上搜索。
}LNode,*Link;
typedefstruct/*表头结点*/
VertexTypedata;
/*起点信息*/
LNode*first;
/*第一个表结点的地址,指向第一条依附该顶点的弧的指针*/
}VNode,AdjList[MAX_VER];
typedefstruct/*邻接链表*/
AdjListver;
/*表头数组*/
intvex,arc;
/*图的当前顶点数和弧数*/
}ALGraph;
/*邻接矩阵结构定义*/
typedefstruct
/*顶点类型*/
/*边的权值*/
}ArcCell,AdjMatrix[MAX_VER][MAX_VER];
/*二维数组*/
VertexTypevexs[MAX_VER];
/*顶点*/
AdjMatrixarcs;
/*邻接矩阵*/
intkind;
/*无向图1,有向图2*/
}MGraph;
{/*记录从顶点集U到V-U的代价最小的边的辅助数组定义*/
VertexTypeadjvex;
VRTypelowcost;
}minside[MAX_VER];
intvisited[MAX_VER];
ALGraphGL;
MGraphGM;
/*函数说明*/
voidmenu_prog();
/*主程序执行菜单*/
intmenu_select();
/*主程序选择菜单*/
voidsetpasword();
/*建立密码*/
voidmadpasword();
/*修改密码*/
voidsetfilesave();
/*图形数据文件建立存盘*/
voidmenu_netprog();
/*邻接表选项菜单执行系统*/
intmenu_netselect();
/*邻接表菜单选择系统*/
voidsetlistunnetwork(ALGraph*G);
/*建立邻接表无向网*/
voidsetlistnetwork(ALGraph*G);
/*建立邻接表有向网*/
voidDestroyGraph(ALGraph*G);
/*销毁图(邻接表)*/
voidprintetwork(ALGraphG);
/*输出邻接表*/
intLocateVex(ALGraphG,VertexTypeu);
/*则返回该顶点在图中位置*/
voiddfs1(ALGraphG,inti);
/*邻接表深度遍历(连通网递归)*/
voiddfs12(ALGraphG,inti);
/*邻接表深度遍历(连通网非递归)*/
voiddfs11(ALGraphG,inti);
/*邻接表深度遍历(非连通网)*/
voidbfs1(ALGraphG,inti);
/*邻接表广度遍历(连通网非递归)*/
voidbfs11(ALGraphG,inti);
/*邻接表广度遍历(非连通网)*/
voiddfss1(ALGraphG,inti);
/*邻接表深度遍历(生成树递归)*/
voiddfss11(ALGraphG,inti);
/*邻接表深度遍历(非连通网生成树)*/
voidbfss1(ALGraphG,inti);
/*邻接表广度遍历(生成树非递归)*/
voidbfss11(ALGraphG,inti);
voidmenu_maprog();
/*邻接矩阵菜单执行系统*/
intmenu_maselect();
/*邻接矩阵菜单选择系统*/
voidsetmatxunnetwork(MGraph*G);
/*建立邻接矩阵无向网*/
voidsetmatxnetwork(MGraph*G);
/*建立邻接矩阵有向网*/
voidDestroyGraphs(MGraph*G);
/*销毁图(邻接矩阵)*/
voidprintmatx(MGraphG);
/*输出邻接矩阵*/
intLocateVexs(MGraphG,VertexTypeu);
/*则返回该顶点在图中位置*/
voiddfs2(MGraphG,inti);
/*邻接矩阵深度遍历(连通网递归)*/
voiddfs22(MGraphG,inti);
/*邻接矩阵深度遍历(非连通网)*/
voidbfs2(MGraphG,inti);
/*邻接矩阵广度遍历(连通网非递归)*/
voidbfs22(MGraphG,inti);
/*邻接矩阵广度遍历(非连通网)*/
voiddfss2(MGraphG,inti);
/*邻接矩阵深度遍历(生成树递归)*/
voiddfss22(MGraphG,inti);
/*邻接矩阵深度遍历(非连通网生成树)*/
voidbfss2(MGraphG,inti);
/*邻接矩阵广度遍历(生成树非递归)*/
voidbfss22(MGraphG,inti);
/*邻接矩阵广度遍历(非连通网生成树)*/
intminimum(minsideSZ,MGraphG);
/*求SZ.lowcost的最小正值*/
voidMiniSpanTreePrim(MGraphG,VertexTypeu);
/*用普里姆算法构造最小生成树*/
voidkruskal(MGraphG);
/*克鲁斯卡尔算法构造网G的最小生成树*/
main()
{/*主程序*/
FILE*fp;
charcha[20],chb[20];
inti=0;
GL.vex=0;
GM.vex=0;
clrscr();
/*清屏*/
fp=fopen("
pasword.exe"
"
rb"
);
if(fp==NULL)setpasword();
elsefclose(fp);
printf("
\n"
************************************\n"
printf("
**\n"
*数据结构课程设计实例*\n"
*图结构遍历生成树操作*\n"
*(邻接表-邻接矩阵)*\n"
*作者:
孙俊杰*\n"
**\n"
*2010年1月1日*\n"
*初始密码:
1234*\n"
fgets(cha,81,fp);
请输入密码:
"
gets(chb);
while(strcmp(cha,chb)<
0||strcmp(cha,chb)>
0)
{
i++;
if(i==3)
*密码错误无权使用!
!
*\n"
*谢谢*\n"
**\n"
*如想使用本软件请与作者联系*\n"
scanf("
%*c"
exit(0);
}
密码错误!
menu_prog();
}
voidmenu_prog()
{/*主程序选项菜单执行系统*/
charch;
intk;
VertexTypeva;
for(;
;
)
switch(menu_select())
case1:
是否建立新的图形文件?
(y/n)"
%c%*c"
&
ch);
if(ch=='
y'
)setfilesave();
/*图形文件数据建立存盘*/
按任意键继续........."
getch();
break;
case2:
menu_netprog();
case3:
menu_maprog();
case4:
现在系统状态是:
邻接矩阵(无向网)!
setmatxunnetwork(&
GM);
printmatx(GM);
/*输出图的邻接矩阵GM*/
getch();
由普里姆算法构造网G的最小生成树:
输入最小生成树的起点va\n"
当输入y时退出遍历:
scanf("
%s"
va);
k=LocateVexs(GM,va);
while(k>
=0&
&
k<
GM.vex)
{
以顶点%s为起点的普里姆最小生成树:
va);
MiniSpanTreePrim(GM,va);
输入最小生成树的起点va\n"
}
DestroyGraphs(&
break;
case5:
由克鲁斯卡尔算法构造网G的最小生成树:
kruskal(GM);
DestroyGraphs(&
case6:
madpasword();
case7:
intmenu_select()
{/*选项菜单系统*/
chars[8];
intc;
*图形结构遍历基本操作窗口*\n"
01:
图形数据文件建立存盘\n"
02:
邻接表(有向无向网)\n"
03:
邻接矩阵(有向无向网)\n"
04:
最小生成树(普里姆)\n"
05:
最小生成树(克鲁斯)\n"
06:
修改系统的密码操作\n"
07:
退出系统\n"
do{
输入你的选择号:
1---7:
gets(s);
c=atoi(s);
}while(c<
0||c>
7);
return(c);
voidmenu_netprog()
{/*邻接表选项菜单执行系统*/
inti,j,k,s;
i=menu_netselect();
switch(i)
if(GL.vex!
=0)
\n系统中已经存在邻接表(有向网)结构!
"
\n请选择销毁后重新更换(无向网)结构!
else{
s=1;
printf("
邻接表(无向网)!
setlistunnetwork(&
GL);
printetwork(GL);
/*输出图的邻接表GL*/
\n系统中已经存在邻接表(无向网)结构!
\n请选择销毁后重新更换(有向网)结构!
else{
s=2;
邻接表(有向网)!
setlistnetwork(&
if(GL.vex==0)
\n系统中没有邻接表结构!
不能输出!
\n请建立邻接表之后再输出!
break;
if(s==1)printf("
elseprintf("
不能遍历!
\n请建立邻接表之后再进行遍历!
无向连通图的深度遍历(邻接表)\n"
打印无向连通图\n"
printetwork(GL);
输入邻接表(连通-非连通)遍历(深度)的起始点va:
scanf("
k=LocateVex(GL,va);
while(k>
0&
=GL.vex)
for(j=1;
j<
=GL.vex;
j++)visited[j]=0;
dfs11(GL,k);
\n\n"
}
无向连通图的广度遍历(邻接表)\n"
输入邻接表(连通-非连通)遍历(广度)的起始点va:
bfs11(GL,k);
pr