图的邻接矩阵深度优先搜素

#include <bits/stdc++.h>
#define VSIZE 100
int visitde[VSIZE];
typedef int VType; //顶点数据类型 
typedef int EType; //边的数据类型 
typedef struct AdjMGrahp{
	VType vexs[VSIZE];
	EType arc[VSIZE][VSIZE];
	int VNum; //顶点的个数 
	int ENum; //边的个数 
}AdjMGraph;


void createAdjMGraph(AdjMGraph *g)//创建邻接矩阵
{
	printf("输入顶点个数:\n");
	scanf("%d",&g->VNum);
	printf("输入边的个数:\n");
	scanf("%d",&g->ENum);
	memset(g->arc,0,sizeof(g->arc)); //未被访问过就全是0 
	for(int k = 0;k < g->ENum;k++){
		int i,j;
		printf("输入边(v1,vj)是否相连\n");
		scanf("%d %d",&i,&j);
		g->arc[i-1][j-1] = g->arc[j-1][i-1] = 1;//两个顶点相连为1
	}
	
	printf("输入每个顶点的值\n"); 
	for(int i = 0;i < g->VNum;i++){
		scanf("%d",&g->vexs[i]);
	}
}

void DFS(AdjMGraph g,int i)
{
	printf("%d\n",g.vexs[i]);
	visitde[i] = 1;//被访问过就为1
	for(int j = 0;j < g.VNum; j++){
		if(visitde[j] == 0 && g.arc[i][j] == 1){//g.arc[i][j] == 1这个表示i和j是相连的,只有相连才可以继续遍历
			DFS(g,j);
		}
	}
}

void DFSTraverse(AdjMGraph g) //图的遍历 
{
	for(int i = 0;i < g.VNum;i++){
		if(visitde[i] == 0){ //表示没有访问过,被访问过就为1
			DFS(g,i);
		}
	}
}

int main()
{
	AdjMGraph g;//定义邻接矩阵
	createAdjMGraph(&g);//创建邻接矩阵
 	DFSTraverse(g);//图的遍历 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42868863/article/details/88930371