#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
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/zp961213/article/details/53311810
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。