图的遍历操作技巧实验报告文档格式.docx

上传人:b****4 文档编号:15749911 上传时间:2022-11-15 格式:DOCX 页数:18 大小:52.33KB
下载 相关 举报
图的遍历操作技巧实验报告文档格式.docx_第1页
第1页 / 共18页
图的遍历操作技巧实验报告文档格式.docx_第2页
第2页 / 共18页
图的遍历操作技巧实验报告文档格式.docx_第3页
第3页 / 共18页
图的遍历操作技巧实验报告文档格式.docx_第4页
第4页 / 共18页
图的遍历操作技巧实验报告文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

图的遍历操作技巧实验报告文档格式.docx

《图的遍历操作技巧实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《图的遍历操作技巧实验报告文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

图的遍历操作技巧实验报告文档格式.docx

typedefstruct{

charvexs[MaxVertexNum];

//顶点表

intedges[MaxVertexNum][MaxVertexNum];

//邻接矩阵,可看作边表

intn,e;

//图中的顶点数n和边数e

}MGraph;

//用邻接矩阵表示的图的类型

//=========建立邻接矩阵=======

voidCreatMGraph(MGraph*G)

{

inti,j,k;

chara;

printf("

InputVertexNum(n)andEdgesNum(e):

"

);

scanf("

%d,%d"

&

G->

n,&

e);

//输入顶点数和边数

%c"

a);

InputVertexstring:

"

for(i=0;

i<

n;

i++)

{

G->

vexs[i]=a;

//读入顶点信息,建立顶点表

}

i++)

for(j=0;

j<

j++)

G->

edges[i][j]=0;

//初始化邻接矩阵

Inputedges,CreatAdjacencyMatrix\n"

for(k=0;

k<

e;

k++){//读入e条边,建立邻接矩阵

%d%d"

i,&

j);

//输入边(Vi,Vj)的顶点序号

edges[i][j]=1;

edges[j][i]=1;

//若为无向图,矩阵为对称矩阵;

若建立有向图,去掉该条语句

}

//=========定义标志向量,为全局变量=======

typedefenum{FALSE,TRUE}Boolean;

Booleanvisited[MaxVertexNum];

//========DFS:

深度优先遍历的递归算法======

voidDFSM(MGraph*G,inti)

{//以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵

intj;

G->

vexs[i]);

//访问顶点Vi

visited[i]=TRUE;

//置已访问标志

for(j=0;

j++)//依次搜索Vi的邻接点

if(G->

edges[i][j]==1&

&

!

visited[j])

DFSM(G,j);

//(Vi,Vj)∈E,且Vj未访问过,故Vj为新出发点

voidDFS(MGraph*G)

{

inti;

visited[i]=FALSE;

//标志向量初始化

if(!

visited[i])//Vi未访问过

DFSM(G,i);

//以Vi为源点开始DFS搜索

//===========BFS:

广度优先遍历=======

voidBFS(MGraph*G,intk)

{//以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索

inti,j,f=0,r=0;

intcq[MaxVertexNum];

//定义队列

cq[i]=-1;

//队列初始化

vexs[k]);

//访问源点Vk

visited[k]=TRUE;

cq[r]=k;

//Vk已访问,将其入队。

注意,实际上是将其序号入队

while(cq[f]!

=-1){//队非空则执行

i=cq[f];

f=f+1;

//Vf出队

j++)//依次Vi的邻接点Vj

visited[j]){//Vj未访问

printf("

vexs[j]);

//访问Vj

visited[j]=TRUE;

r=r+1;

cq[r]=j;

//访问过Vj入队

//==========main=====

voidmain()

MGraph*G;

G=(MGraph*)malloc(sizeof(MGraph));

//为图G申请内存空间

CreatMGraph(G);

//建立邻接矩阵

PrintGraphDFS:

DFS(G);

//深度优先遍历

\n"

PrintGraphBFS:

BFS(G,3);

//以序号为3的顶点开始广度优先遍历

执行顺序:

8,9

01234567

Inputedges,CreatAdjacencyMatrix

01

02

13

14

25

26

37

47

56

01374256

31704256

2.邻接链表作为存储结构程序示例

#defineMaxVertexNum50//定义最大顶点数

typedefstructnode{//边表结点

intadjvex;

//邻接点域

structnode*next;

//链域

}EdgeNode;

typedefstructvnode{//顶点表结点

charvertex;

//顶点域

EdgeNode*firstedge;

//边表头指针

}VertexNode;

typedefVertexNodeAdjList[MaxVertexNum];

//AdjList是邻接表类型

typedefstruct{

AdjListadjlist;

//邻接表

//图中当前顶点数和边数

}ALGraph;

//图类型

//=========建立图的邻接表=======

voidCreatALGraph(ALGraph*G)

EdgeNode*s;

//定义边表结点

//读入顶点数和边数

i++)//建立边表

adjlist[i].vertex=a;

//读入顶点信息

adjlist[i].firstedge=NULL;

//边表置为空表

Inputedges,CreatAdjacencyList\n"

k++){//建立边表

//读入边(Vi,Vj)的顶点对序号

s=(EdgeNode*)malloc(sizeof(EdgeNode));

//生成边表结点

s->

adjvex=j;

//邻接点序号为j

next=G->

adjlist[i].firstedge;

adjlist[i].firstedge=s;

//将新结点*S插入顶点Vi的边表头部

adjvex=i;

//邻接点序号为i

adjlist[j].firstedge;

adjlist[j].firstedge=s;

//将新结点*S插入顶点Vj的边表头部

voidDFSM(ALGraph*G,inti)

{//以Vi为出发点对邻接链表表示的图G进行DFS搜索

EdgeNode*p;

adjlist[i].vertex);

//标记Vi已访问

p=G->

//取Vi边表的头指针

while(p){//依次搜索Vi的邻接点Vj,这里j=p->

adjvex

visited[p->

adjvex])//若Vj尚未被访问

DFSM(G,p->

adjvex);

//则以Vj为出发点向纵深搜索

p=p->

next;

//找Vi的下一个邻接点

voidDFS(ALGraph*G)

visited[i])//Vi未访问过DFSM(G,i);

//以Vi为源点开始DFS搜索}//==========BFS:

广度优先遍历=========

voidBFS(ALGraph*G,intk){//以Vk为源点对用邻接链表表示的图G进行广度优先搜索

inti,f=0,r=0;

//定义FIFO队列for(i=0;

i

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

当前位置:首页 > 高等教育 > 军事

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

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