数据结构课程设计图的实现文档格式.docx

上传人:b****8 文档编号:22881938 上传时间:2023-02-05 格式:DOCX 页数:25 大小:21.78KB
下载 相关 举报
数据结构课程设计图的实现文档格式.docx_第1页
第1页 / 共25页
数据结构课程设计图的实现文档格式.docx_第2页
第2页 / 共25页
数据结构课程设计图的实现文档格式.docx_第3页
第3页 / 共25页
数据结构课程设计图的实现文档格式.docx_第4页
第4页 / 共25页
数据结构课程设计图的实现文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数据结构课程设计图的实现文档格式.docx

《数据结构课程设计图的实现文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图的实现文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

数据结构课程设计图的实现文档格式.docx

do

***************无向图的基本操作及应用***************\n"

1创建无向图的邻接矩阵 

2创建无向图的邻接表 

3无向图的深度优先遍历 

4无向图的广度优先遍历 

*************************************************\n"

cin>

>

n;

switch(n){

case1:

CreatUDG_M(MG);

break;

case2:

CreatUDG_ALG(ALG);

dispgraph(ALG);

case3:

dfstraverse(ALG);

case4:

BFSTraver(MG);

default:

if(n!

=5)

错误,重新输入\n"

}while(n!

=5);

voidUDN()

MGraphMG;

do{

***************无向网的基本操作及应用***************\n"

1创建无向网的邻接矩阵 

2创建无向网的邻接表 

3prim算法求最小生成树 

4kraskal算法求最小生成树 

****************************************************\n"

CreateUDN_M(MG);

CreateUDN(ALG);

dispUDN(&

ALG);

prim(MG);

Kruskal(MG);

voidDG()

***************有向图的基本操作及应用***************\n"

cout<

1创建有向图的邻接矩阵 

2创建有向图的邻接表 

3拓扑排序 

4退出 

CreatDG_M(MG);

CreatDG_ALG(ALG);

CreatDG_ALG(ALG);

TopologicalSort(ALG);

=4)

=4);

voidDN()

PathMatrixp1;

ShortPathTabled1;

dist2d;

path2p;

***************有向网的基本操作及应用***************\n"

1创建有向网的邻接矩阵 

2创建有向网的邻接表 

3关键路径 

4单源顶点最短路径问题 

5每对顶点最短路径问题 

6退出 

CreateDNG_M(MG);

CreateDN(ALG);

dispDN(&

CreateDN(ALG);

CriticalPath(ALG);

ShortestPath(MG,1,p1,d1);

case5:

Floyd(MG,p,d);

=6)

=6);

voidmain()

ShowMainMenu();

UDG();

UDN();

DG();

DN();

//Graph.h(图的定义) 

#defineMAXVEX30

#defineMAXCOST1000

typedefintInfoType;

typedefstruct{

VertexTypevexs[MAXVEX];

intarcs[MAXVEX][MAXVEX];

intvexnum,arcnum;

}MGraph;

typedefstructarcnode{

intadjvex;

//邻接点序号

intw;

//边或狐上的权

InfoType*info;

structarcnode*next;

}ArcNode;

typedefstructvnode{

VertexTypedata;

//顶点信息

intindegree;

ArcNode*firstarc;

//指向下一个边结点

}Vnode,AdjList[MAXVEX];

AdjListvertices;

intvexnum,arcnum;

}ALGraph;

//UDGraph.h(无向图的基本操作及应用) 

voidCreatUDG_M(MGraph&

G)

inti,j,c;

请输入顶点数,边数:

G.vexnum;

G.arcnum;

请输入结点信息,如“123..."

endl;

for(i=1;

i<

=G.vexnum;

i++)

{

G.vexs[i];

for(j=1;

j<

j++)

G.arcs[i][j]=0;

for(c=1;

c<

=G.arcnum;

c++)

{printf("

第%d条边=>

起点序号,终点序号:

c);

i>

j;

G.arcs[i][j]=1;

G.arcs[j][i]=1;

创建的邻接矩阵为:

for(inti=1;

{for(intj=1;

G.arcs[i][j]<

"

邻接矩阵创建完毕"

/////////////////////////////////////////////////////////////////////////

voidCreatUDG_ALG(ALGraph&

inti,s,d;

ArcNode*p,*q;

请输入顶点数,边数:

for(i=1;

cin>

G.vertices[i].data;

G.vertices[i].firstarc=NULL;

{

printf("

i);

s>

d;

p=(ArcNode*)malloc(sizeof(ArcNode));

q=(ArcNode*)malloc(sizeof(ArcNode));

p->

adjvex=d;

 

q->

adjvex=s;

p->

next=G.vertices[s].firstarc;

//p插入顶点s的邻接表中

G.vertices[s].firstarc=p;

q->

next=G.vertices[d].firstarc;

//q插入顶点d的邻接表中

G.vertices[d].firstarc=q;

voiddispgraph(ALGraphG)

inti;

ArcNode*p;

图的邻接表表示如下:

);

printf("

[%d,%c]=>

i,G.vertices[i].data);

p=G.vertices[i].firstarc;

while(p!

=NULL)

[%d→]"

p->

adjvex);

p=p->

next;

∧\n"

////////////////////////////////////////////////////////////////////////

intvisit[20];

voiddfs(ALGraphG,intv)//从顶点v出发深度优先搜索

{visit[v]=1;

G.vertices[v].data;

ArcNode*p;

p=G.vertices[v].firstarc;

while(p){

if(visit[p->

adjvex]!

=1)

dfs(G,p->

}//while

voiddfstraverse(ALGraphG)//对一个图进行深度优先搜索

intv;

for(v=1;

v<

v++)

if(!

visit[v])

dfs(G,1);

///////////////////////////////////////////////////////////////////////

CirQueue.h"

intFirstAdjVex(MGraphG,intvex)

intw,i;

if(G.arcs[vex][i]==1&

&

visit[i]==0)

{w=i;

elsew=0;

returnw;

//获取下一个未被访问的邻接节点

intNextAdjVex(MGraphG,intvex,intw)

for(i=w;

i++)//从w开始

voidBFSTraver(MGraphG)

Queueq;

InitQueue(&

q);

inti,w,u;

visit[i]=0;

i++)//确保所有的节点被访问到的一个循环

if(visit[i]==0)

visit[i]=1;

EnQueue(&

q,i);

while(!

QueueEmpty(&

q))//当队列非空时一直做

DeQueue(&

q,u);

//取出队列头元素并置为u

w=FirstAdjVex(G,u);

while(w>

0)

if(visit[w]==0)

visit[w]=1;

q,w);

w=NextAdjVex(G,u,w);

//UNGraph.h(无向网的基本操作及应用) 

voidCreateUDN_M(MGraph&

{inti,j,k,n;

请输入顶点数和边数"

输入顶点"

G.arcs[i][j]=999;

输入边的起点到终点的序号及权值"

for(k=1;

k<

k++)

j>

G.arcs[i][j]=n;

G.arcs[j][i]=G.arcs[i][j];

//建立无向网的邻接矩阵存储结构

///////////////////////////////////////////////////////

voidCreateUDN(ALGraph&

G) 

//邻接表建立无向网

int 

i,s,d,w1;

ArcNode*p,*q;

输入节点数和边数"

G.vexnum>

输入顶点,如“123...”"

i++) 

//输入顶点

//首先初始化为NULL

}

d>

w1;

//输入一条边依附的起点序号和终点序号

p=(ArcNode*)malloc(sizeof(ArcNode));

q=(ArcNode*)malloc(sizeof(ArcNode));

info=(InfoType*)malloc(sizeof(InfoType));

adjvex=d;

//保存该弧所指向的顶点位置

adjvex=s;

*(p->

info)=w1;

//保存权值到一个结点里

*(q->

//保存权值到一个结点里

voiddispUDN(ALGraph*G) 

/*打印无向网每个结点的单链表*/

inti,j;

[起点权值终点]"

for(i=1;

i<

=G->

vexnum;

i++)

while(G->

vertices[i].firstarc->

next)

["

G->

vertices[i].data<

j=G->

adjvex;

*(G->

info)<

vertices[j].data<

]"

G->

vertices[i].firstarc=G->

}

vertic

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1