无向图的深度优先遍历(邻接矩阵)


#include
#include
#define INFINTY 65535 //最大值
#define MAX  20  //最大顶点个数
#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1
typedef int status;
typedef int EdgeType;//边
typedef char VertexType;//顶点类
//typedef enum{DG,DN,UDG,UDN}GraphKind;//有向图,有向网,无向图,无向网
typedef struct
{
	VertexType vexs[MAX];//顶点
	EdgeType  arcs[MAX][MAX];  //邻接矩阵
	int vexnum,arcnum; //图当前的顶点数和弧数
//	GraphKind kind;  //图的种类
}MGraph;
status LocateVex(MGraph *G,VertexType e)
{
	int i;
	for(i=0;ivexnum;++i)
	{
		if(e==G->vexs[i])
			return i;
	}
	return -1;
}
status CreatUDG(MGraph *G)//无向图
{
	scanf("%d %d",&G->vexnum,&G->arcnum);getchar();
	int i,j,k;
	VertexType v1,v2;
	i=0;
	while(ivexnum)
	{
		scanf("%c",&G->vexs[i]);
		i++;
	}
	getchar();
	for(i=0;ivexnum;i++)//初始化   
		for(j=0;jvexnum;j++)
			G->arcs[i][j]=INFINTY;
	for(k=0;karcnum;k++)
	{
		scanf("%c,%c",&v1,&v2);//输入一条边依附的顶点
		getchar();
		i=LocateVex(G,v1);
		j=LocateVex(G,v2);
		G->arcs[j][i]=1;
		G->arcs[i][j]=G->arcs[j][i];
	}
	return OK;
}
int visited[MAX];
void DFS(MGraph *G,int v)
{
	int j;
	visited[v]=TRUE;
	printf("%c ",G->vexs[v]);
	for(j=0;jvexnum;j++)
		if(G->arcs[v][j]==1&&!visited[j])
			DFS(G,j);
}
void DFSTraverse(MGraph *G)
{
	int v;
	for(v=0;vvexnum;++v)
		visited[v]=FALSE;
	for(v=0;vvexnum;++v)
		if(!visited[v])
			DFS(G,v);
}
void main()
{
	MGraph *G=NULL;
	G=(MGraph *)malloc(sizeof(MGraph));
	CreatUDG(G);
	DFSTraverse(G);
}                                 
                          

 

你可能感兴趣的:(数据结构)