#include<stdio.h>
#include<stdlib.h>
#define Status
#define OK 1
#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef struct
{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
} AMGraph;
int LocateVex(AMGraph *G, VerTexType vex)
{
for(int i=0;i<G->vexnum;i++)
{
if(G->vexs[i]==vex)
{
return i;
}
}
}
Status CreateUDN(AMGraph *G)
{
printf("请输入总顶点数\n");
scanf("%d",&G->vexnum);
printf("请输入总边数\n");
scanf("%d",&G->arcnum);
int i=0;
getchar();
printf("请输入顶点信息\n");
for(i=0;i<G->vexnum;++i)
{
scanf("%c",&G->vexs[i]);
getchar();
}
int j=0;
int k=0;
for(i=0;i<G->vexnum;++i)
{
for(j=0;j<G->vexnum;++j)
{
G->arcs[i][j]=0;
}
}
for(k=0;k<G->arcnum;++k)
{
printf("请输入第%d条边的信息\n",(k+1));
printf("请输入第一个顶点:\n");
VerTexType v1;
VerTexType v2;
scanf("%c",&v1);
getchar();
printf("请输入第二个顶点:\n");
scanf("%c",&v2);
getchar();
int i;
int j;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G->arcs[i][j]=1;
G->arcs[j][i]=G->arcs[i][j];
}
return OK;
}
bool visited[MVNum];
int FirstAdjVex(AMGraph G, int v)
{
for (int i = 0; i < G.vexnum; i++)
{
if (G.arcs[v][i] != 0)
{
return i;
}
}
return -1;
}
int NextAdjVex(AMGraph G, int v, int w)
{
for (int i = w + 1; i < G.vexnum; i++)
{
if (G.arcs[v][i] != 0)
{
return i;
}
}
return -1;
}
void DFS(AMGraph G,int v)
{
printf("%c",G.vexs[v]);
visited[v]=true;
for(int w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
{
if(!visited[w])
DFS(G,w);
}
}
int main()
{
AMGraph G;
CreateUDN(&G);
int v=0;
DFS(G,v);
}