#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100
typedef struct
{
char vexs[MAXVEX];
int arc[MAXVEX][MAXVEX];
int numVertexes,numEdges; //顶点数和边数
}MGraph;
void CreateMGraph(MGraph *G)
{
int i,j,k;
printf("请输入顶点数和边数:\n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
printf("输入顶点信息:\n");
for(i=0;i<G->numVertexes;i++)
scanf(" %c",&G->vexs[i]);
for(i=0;i<G->numVertexes;i++) //初始化邻接矩阵
for(j=0;j<G->numVertexes;j++)
G->arc[i][j]=0;
for(k=0;k<G->numEdges;k++)
{
printf("输入边(vi,vj)上的上标i,下标j:\n");
scanf("%d,%d",&i,&j);
G->arc[i][j]=1;
G->arc[j][i]=G->arc[i][j]; //无向图
}
}
int visited[MAXVEX]; //访问标记数组
void DFS(MGraph G,int i)
{
int j;
visited[i]=1;
printf("%c",G.vexs[i]);
for(j=0;j<G.numVertexes;j++)
if(G.arc[i][j]==1&&visited[j]!=1)
DFS(G,j);
}
void DFSTraverse(MGraph G)
{
int i;
for(i=0;i<G.numVertexes;i++)
visited[i]=0;
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
DFS(G,i);
}
}
int main()
{
MGraph p;
CreateMGraph(&p);
DFSTraverse(p);
return 0;
}
ps:完成这个小算法之前,遇到一个下问题就是,在录入顶点信息时如果写成<span style="font-family: Arial, Helvetica, sans-serif;">scanf("%c",&G->vexs[i]),则在输入过程中会将回车符当成顶点信息输入,解决方法是写成</span><pre name="code" class="cpp"> scanf(" %c",&G->vexs[i]);“%c”前加一个空格符。