图的邻接表存储与深度优先遍历代码实现
生活随笔
收集整理的這篇文章主要介紹了
图的邻接表存储与深度优先遍历代码实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Graph.h
Vnode結(jié)構(gòu)成員firstarc在定義時(shí)賦初值NULL,在Visual Stdio 2013下編譯通過,VC6.0就不行(非靜態(tài)數(shù)據(jù)成員不能初始化)
Graph.cpp
#include "Graph.h"int vnum[MAX_VERTEX_NUM] = { false }; //vnum為訪問標(biāo)識(shí)數(shù)組void createG(ALGraph *G) //以鄰接表存儲(chǔ)方式創(chuàng)建圖 {//char TemData[64]; //暫時(shí)存儲(chǔ)頂點(diǎn)數(shù)據(jù)int i, j; //函數(shù)局部變量i,j用來記錄弧的頂點(diǎn)ArcNode *s; //新建的弧printf("請(qǐng)輸入頂點(diǎn)數(shù)和邊數(shù):\n");scanf("%d%d", &G->vexnum, &G->arcnum);for (int i = 0; i < G->vexnum; i++) //輸入頂點(diǎn)信息,這里可以用下標(biāo)唯一標(biāo)識(shí)每個(gè)頂點(diǎn){/*scanf("%s", TemData);G->vertices[i].data = (VertexType)TemData[64];*/G->vertices[i].data = (VertexType)i;}for (int k = 0; k < G->arcnum; k++){scanf("%d%d", &i, &j);s = (ArcNode *)malloc(sizeof(ArcNode)); //將s插入到i頂點(diǎn)的表頭s->adjvex = j;s->nextarc = G->vertices[i].firstarc;G->vertices[i].firstarc = s;s = (ArcNode *)malloc(sizeof(ArcNode)); //將s插入到j(luò)頂點(diǎn)的表頭s->adjvex = i;s->nextarc = G->vertices[j].firstarc;G->vertices[j].firstarc = s;} }void showG(ALGraph *G) //輸出表的信息 {ArcNode* Tem;for (int i = 0; i < G->vexnum; i++){printf("%d->", i);Tem = G->vertices[i].firstarc;while (Tem != NULL){printf("%d->", Tem->adjvex);Tem = Tem->nextarc;}printf("\n");} }void DFSTraverse(ALGraph G) { for (int i = 0; i < G.vexnum; i++)if (!vnum[i]) DFS(G, i, Print); }void DFS(ALGraph G, int i, void(*visit) (VNode v)) //對(duì)表G從頂點(diǎn)i開始做深度優(yōu)先遍歷 {vnum[i] = true; visit(G.vertices[i]);for (ArcNode *w = G.vertices[i].firstarc; w != NULL; w = w->nextarc)if (!vnum[w->adjvex]) DFS(G, w->adjvex, Print); }main.cpp
#include "Graph.h" void main() {ALGraph G;createG(&G);showG(&G);DFSTraverse(G); }總結(jié)
以上是生活随笔為你收集整理的图的邻接表存储与深度优先遍历代码实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图的邻接矩阵表示与最短路径算法( Dij
- 下一篇: eCognition易康导出分割结果