#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#define MAX 10 //最多顶点个数
#define ok 1
int visited[MAX];
typedef struct ArcNode
{
int adj;
} ArcNode;
#define ok 1
int visited[MAX];
typedef struct ArcNode
{
int adj;
} ArcNode;
typedef struct
{
char vertex[MAX];
ArcNode arcs[MAX][MAX];
int vexnum,arcnum;
}Adj;
{
char vertex[MAX];
ArcNode arcs[MAX][MAX];
int vexnum,arcnum;
}Adj;
int locate(Adj *G,char v);
int creat(Adj *G)
{
int i,j,k;
char v1,v2;
printf("输入图的顶点数和弧数\n");
scanf("%d%d",&G->vexnum,&G->arcnum);//vexnum是顶点数
getchar();
for(i=0;i<G->vexnum;i++)
{
for(j=0;j<G->vexnum;j++)
{
G->arcs[i][j].adj=0;
}
}
for(i=0;i<G->vexnum;i++)
{
printf("输入顶点值:");
scanf("%c",&G->vertex[i]);
getchar();
}
int creat(Adj *G)
{
int i,j,k;
char v1,v2;
printf("输入图的顶点数和弧数\n");
scanf("%d%d",&G->vexnum,&G->arcnum);//vexnum是顶点数
getchar();
for(i=0;i<G->vexnum;i++)
{
for(j=0;j<G->vexnum;j++)
{
G->arcs[i][j].adj=0;
}
}
for(i=0;i<G->vexnum;i++)
{
printf("输入顶点值:");
scanf("%c",&G->vertex[i]);
getchar();
}
for(k=0;k<G->arcnum;k++)
{ printf("输入一条弧的两个顶点:");
scanf("%c,%c,%d",&v1,&v2);
getchar();
i=locate(G,v1);
j=locate(G,v2);
G->arcs[i][j].adj=1;
G->arcs[j][i].adj=1;
}
return ok;
}
int locate(Adj *G,char v)
{
int j=-1,k;
for(k=0;k<G->vexnum;k++)
if(G->vertex[k]==v)
{
j=k;break;
}
return (j);
}
void DepthFirstSearch(Adj G,int v0)
{
int vj;
printf("%c,",G.vertex[v0]);
visited[v0]=1;
for(vj=0;vj<G.vexnum;vj++)
{
if( !visited[vj] && G.arcs[v0][vj].adj==1)
DepthFirstSearch(G,vj);
}
}
{
int j=-1,k;
for(k=0;k<G->vexnum;k++)
if(G->vertex[k]==v)
{
j=k;break;
}
return (j);
}
void DepthFirstSearch(Adj G,int v0)
{
int vj;
printf("%c,",G.vertex[v0]);
visited[v0]=1;
for(vj=0;vj<G.vexnum;vj++)
{
if( !visited[vj] && G.arcs[v0][vj].adj==1)
DepthFirstSearch(G,vj);
}
}
void TravelGraph(Adj G)
{
int vi;
for(vi=0;vi<G.vexnum;vi++)
visited[vi]=0;
for(vi=0;vi<G.vexnum;vi++)
{
if(!visited[vi])
DepthFirstSearch(G,vi);
}
}
{
int vi;
for(vi=0;vi<G.vexnum;vi++)
visited[vi]=0;
for(vi=0;vi<G.vexnum;vi++)
{
if(!visited[vi])
DepthFirstSearch(G,vi);
}
}
int main()
{
Adj G;
creat(&G);
TravelGraph(G);
PRINTF("\n");
return 0;
}
{
Adj G;
creat(&G);
TravelGraph(G);
PRINTF("\n");
return 0;
}