当前位置 : 主页 > 编程语言 > c语言 >

邻接矩阵的建立及深度优先搜索算法

来源:互联网 收集:自由互联 发布时间:2023-09-03
#includestdio.h#includestdlib.h#includestring.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;#define MAX_VERTEX_NUM 20typedef enum{DG,DN,UDG,UDN}GraphKind;typedef int VRTy
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define MAX_VERTEX_NUM 20
typedef enum{DG,DN,UDG,UDN}GraphKind;
typedef int VRType;
typedef char InfoType;
typedef char VertexType [10];
typedef struct ArcCell
{
	VRType adj;
	InfoType *info;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
	VertexType vexs[MAX_VERTEX_NUM];
	AdjMatrix arcs;
	int vexnum,arcnum;
	GraphKind Kind;
}MGraph;
int visited[MAX_VERTEX_NUM];
Status (*VisitFunc)(MGraph G,int v);
int LocateVex(MGraph G,VertexType v)
{
	int i;
	for(i=0;i<G.arcnum;i++)
		if(!strcmp(G.vexs[i],v))
			return i;
	return -1;
}
Status CreateUDN(MGraph *G)
{
	int i,j,k;
	char v1[20],v2[20];
	printf("请输入顶点和弧的个数:");
	scanf("%d%d",&G->vexnum,&G->arcnum);
	for(i=0;i<G->vexnum;i++)
		scanf("%s",G->vexs[i]);
	for(i=0;i<G->vexnum;i++)
		for(j=0;j<G->vexnum;j++)
		{
			G->arcs[i][j].adj=0;
			G->arcs[i][j].info=NULL;
		 }
		printf("\n请输入边依附的顶点:\n"); 
	for(k=0;k<G->arcnum;k++)
	{
		scanf("%s%s",&v1,&v2);
		i=LocateVex(*G,v1);
		j=LocateVex(*G,v2);
		G->arcs[i][j].adj=G->arcs[j][i].adj=1;
	}
}
int FirstAdjVex(MGraph G,int v)
{
	int i;
	for(i=0;i<G.vexnum;i++)
		if(G.arcs[v][i].adj)
			return i;
	return -1;
}
int NextAdjVex(MGraph G,int v,int w)
{
	int k;
	if(!G.arcs[v][w].adj)
		return -1;
	for(k=w+1;k<G.vexnum;k++)
		if(G.arcs[v][k].adj)
			return k;
}
void DFS(MGraph G,int v)
{
	int w;
	visited[v]=TRUE;
	(*VisitFunc)(G,v);
	for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
		if(!visited[w])
			DFS(G,w);
}
void DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v))
{
	VisitFunc=Visit;
	int i;
	for(i=0;i<G.vexnum;i++)
		visited[i]=FALSE;
	for(i=0;i<G.vexnum;i++)
		if(!visited[i])
			DFS(G,i);
}
Status func(MGraph G,int v)
{
  printf("%s",G.vexs[v]);
}
int main()
{
	MGraph G;
	int i,j;
	CreateUDN(&G);
	printf("建立的邻接矩阵为:\n");
	for(i=0;i<G.vexnum;i++)
	{
		for(j=0;j<G.vexnum;j++)
			printf("%3d",G.arcs[i][j].adj);
		printf("\n");
	}
	printf("深度优先搜索结果为:\n");
	DFSTraverse(G,func);
	printf("\n");
}

邻接矩阵的建立及深度优先搜索算法_#define

【文章原创作者大丰网页制作公司 http://www.1234xp.com/dafeng.html 欢迎留下您的宝贵建议】
上一篇:MySQL数据基础知识整理—2
下一篇:没有了
网友评论