#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
今日推荐
周排行