- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6次课 图(1);图的考点;图的考点;题目1;一、图的存储结构;例1;1.邻接矩阵
(2)对无(有)向网,即带权图
;课堂测试;2.邻接表;邻接点链表的结点结构
(1)普通有(无)向图
(2)带权有(无)向图—网
说明:
adjvex域—存放邻接点在表头数组中的下标。
weight域—存放边(顶点,邻接点)的权值
next域—存放指向表头顶点的下一个邻接点的指针
;例1;带权有(无)向图—网;课堂练习;二、图的遍历;V1; 设图的邻接矩阵存储结构如下:;课堂练习;;
;typedef int VertexType;
/*表头顶点*/
typedef struct v_node
{ VertexType vertex; /*存放顶点信息*/
E_NODE *firstarc; /*指示第一个邻接点*/
} V_NODE;
typedef struct
{ V_NODE verx[MAXVER]; /*顶点数组类型*/
int vernum;
int arcnum;
}adjlist;; int visited[MAXVER] = {0}; /* 访问标识数组初始化*/ void DFSTraverse(adjlist G) {/* 对以邻接表表示的连通图G作深度优先遍历*/ int v, printf(“Please select the original vertex:”);
scanf(“%d”, v);
DFS(G, v);/*从编号为v的结点开始进行深度优先搜索*/
}
void DFS(adjlist G, int v)
{ int w; E_NODE *p; /* p 为指向弧结点的指针*/
printf(“%d”,G.verx[v-1].vertex); /* 访问第 i 个顶点*/ visited[v-1] = 1; /* 设访问标志*/ for ( p=G.verx[ v-1 ].firstarc; p; p=p-next ) { w = p-adjvex+1; /* 找到v的邻接点w*/ if (!visited[w-1]) DFS(G, w);
} };课堂练习;2.广度优先搜索(BFS)遍历;对于非连通图,若上述操作后,图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止。
; 设图的邻接矩阵存储结构如下:;;BFS算法实现; printf(“Please select the original vertex:”);
scanf(“%d”, v);
/*从顶点v出发进行广度优先搜索*/
? printf(“%d”,G.verx[v-1].vertex); /*访问图中第 v 个顶点*/
visited[v-1] = 1; enqueue (Q, v); /* v 入队列*/ while (! emptyqueue(Q))
{ outqueue (Q, v); /*队头元素出队???置为 v*/ for (p = G.verx[v-1].firstarc; p; p=p-next ) { w = p-adjvex+1;
if ( ! visited[w-1] )
{ visited[w-1] = 1;
printf(“%d”,G.verx[w-1 ].vertex);/* 访问图中第 w 个顶点*/ enqueue(Q, w);/* 当前访问的顶点 w 入队列 Q*/ } /*end if*/
}/*end for*/ } /*end while*/
;课堂练习;三、生成树;V1;V1;课堂练习
文档评论(0)