无向图邻接矩阵的储存和深度优先遍历

#include<stdio.h>
int visited[Maxsize];
#define Maxsize 50
#define M 500//定义无穷数值为5000
//标记顶点是否被访问,1为访问,0为未访问
typedef struct
{
 int vex[Maxsize];//顶点表
 int arc[Maxsize][Maxsize];//矩阵表
 int numVertexes,numEdges;//顶点数和边数
}MGraph;
void GreateGraph(MGraph *G)
{
	int i,j,k,l;
	printf("请输入顶点数和边数:");
	scanf("%d%d",&G->numVertexes,&G->numEdges);
	printf("%d %d",G->numVertexes,G->numEdges);
	for(i=0;i<G->numVertexes;i++)
	{
		printf("请输入顶点的值:\n");
		scanf("%d",&G->vex[i]);
	}
	for(j=0;j<G->numVertexes;j++)
		for(k=0;k<G->numVertexes;k++)
		{
			G->arc[i][j]=M;
		}
  //初始化矩阵
		printf("%d\n",G->numEdges);
  for(l=0;l<G->numEdges;l++)//对每个边赋予权值
  {
   printf("输入边(Vi,Vj)的下标i,j和权值:");
   scanf("%d %d %d",&i,&j,&k);
   G->arc[i][j]=k;
   G->arc[j][i]=G->arc[i][j];
  }
}
//深度优先遍历算法
 void DFS(MGraph G ,int i)
{
	int j;
	visited[i]=1;
	printf("%d\n",G.vex[i]);//输出顶点的值
	for(j=0;j<G.numVertexes;j++)
	{
		if(G.arc[i][j]=1&&!visited[j])
		{
			DFS(G,j);
		}
	}
}
void DFS_search(MGraph G)
{
	int i;//用于循环
	for(i=0;i<G.numVertexes;i++)//将顶点都标记为0 即表示未访问
	{
		visited[i]=0;
	}
	for(i=0;i<G.numVertexes;i++)//用于判断该顶点是否被访问
	{
		if(visited[i]==0)
			DFS(G,i);//深度优先遍历函数
	}
}

int main()
{
	MGraph G;
	GreateGraph(&G);
	DFS_search(G);
	return 0;
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/zp961213/article/details/53311810
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞