无向图的深度优先遍历序列

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define MAXVERTEXNUM 20

#define TRUE 1

#define FALSE 0

typedef char VertexType;

typedef int VRType;

typedef int Status;

typedef int InfoType;

typedef enum {DG,DN,UDG,UDN} GraphKind;

typedef struct ArcCell { // 弧的定义

VRType adj; // VRType是顶点关系类型。

// 对无权图,用1或0表示相邻否;

// 对带权图,则为权值类型。

InfoType *info;

} ArcCell,AdjMatrix[MAXVERTEXNUM][MAXVERTEXNUM]; typedef struct { // 图的定义

VertexType vexs[MAXVERTEXNUM]; // 顶点信息 AdjMatrix arcs; // 弧的信息

int vexnum, arcnum; // 顶点数,弧数

GraphKind kind; // 图的种类标志

} MGraph;

int visited[MAXVERTEXNUM];

int LocateVex(MGraph G, VertexType v){

int i;

for(i=0; i

if(G.vexs[i]==v)

return i;

return -1;

}

void CreateMGraph(MGraph &G){ //建立无向图

int i,j,k;

char v1,v2;

printf("\n输入顶点数和边数(用逗号隔开) : ");

scanf("%d,%d",&G.vexnum, &G.arcnum);

getchar();

for (i=0 ; i< G.vexnum; ++i)

{printf("输入顶点 %d 的值 : ",i+1);

scanf("%c",&G.vexs[i]);

getchar();}

for (i=0 ; i< G.vexnum; ++i)

for(j=0 ; j< G.vexnum; ++j)

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

for(k=1;k<=G.arcnum;k++)

{printf("输入第 %d 条边的起始顶点和终止顶点(用逗号隔开): ",k); scanf("%c,%c",&v1,&v2);

i=LocateVex(G,v1) ; j= LocateVex(G,v2) ;

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

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

getchar();}

} //END

void DFS(MGraph G,int i);

void DFSTraverse(MGraph G)

{ // 对图 G 作深度优先遍历。

int v;

for (v=0; v

visited[v] = 0; // 访问标志数组初始化

for (v=0; v

if (!visited[v]) DFS(G, v);

// 对尚未访问的顶点调用DFS

}

void DFS(MGraph G,int i)

{int j;

printf("%3c",G.vexs[i]);

visited[i]=1;

for(j=0;j

{ if(!visited[j] &&G.arcs[i][j].adj)

DFS(G,j); }

}

void main(){

int i,j;

MGraph G;

CreateMGraph(G);

printf("\n\n图的邻接矩阵显示: \n");

for(i=0;i

{for(j=0;j

printf("%d ",G.arcs[i][j].adj); printf("\n");}

printf("当前图的深度优先遍历序列为\n"); DFSTraverse(G);

}

相关文档
最新文档