#include <stdio.h>
#include <malloc.h>
#define True 1
#define Fal 0
#define MAX_VERTEX_NUM 20 /*最多顶点个数*/
int visited[MAX_VERTEX_NUM]; /*访问标志数组*/
typedef enum{DG, DN, UDG, UDN} GraphKind; /*图的种类*/
typedef char VertexData;
typedef struct ArcNode
太和公{
int adjvex; /*该弧指向顶点的位置*/
struct ArcNode *nextarc; /*指向下一条弧的指针*/
}ArcNode;
typedef struct VertexNode
{
VertexData data; /*顶点数据*/
ArcNode *firstarc; /*指向该顶点第一条弧的指针*/
}VertexNode;
typedef struct
{
VertexNode vertex[MAX_VERTEX_NUM];
int vexnum,arcnum; /*图的顶点数和弧数*/
户口分户申请书 GraphKind kind; /*图的种类标志*/
}AdjList; /*基于邻接表的图(Adjacency List Graph)*/
int LocateVertex(AdjList *G,char v) /*求顶点位置函数*/
{
int j=-1,k;
for(k=0;k<G->vexnum;k++)
if(G->vertex[k].data==v)
{
官换新机 j=k;
break;
}
return(j);
}
void CreateAdjList(AdjList *G) /*创建一个有向网*/
{
int i,j,k,m;
VertexData v1,v2;
ArcNode *s;
ArcNode *p;
皮蛋苋菜 printf("输入图的顶点数和弧数\n");
fflush(stdin);
scanf("%d,%d",&G->vexnum,&G->arcnum);
for(i=0;i<G->vexnum;i++)
{
printf("输入图的顶点\n");
fflush(stdin);
scanf("%c",&G->vertex[i].data);/* 输入图的顶点*/
鼻塞流清鼻涕 G->vertex[i].firstarc=NULL;
网速限制 }getchar();
for(j=1;j<=G->arcnum;j++)
{
printf("请输入项临街的两个节点");
scanf("%c,%c",&v1,&v2);
getchar();
k=LocateVertex(G,v1);
m=LocateVertex(G,v2);
s=(ArcNode*)malloc(sizeof(ArcNode));
p=(ArcNode*)malloc(sizeof(ArcNode));
p->nextarc=NULL;
s->nextarc=NULL;
p->adjvex=k;
s->adjvex=m;
p->nextarc=G->vertex[m].firstarc;
s->nextarc=G->vertex[k].firstarc;
G->vertex[m].firstarc=p;
G->vertex[k].firstarc=s;
}
}
void DaYin (AdjList g)
{
int i;
ArcNode *p;
for(i=0;i<g.vexnum;i++)
{
printf("%c",g.vertex[i].data);
p=g.vertex[i].firstarc;
while(p!=NULL)
{
printf("%d",p->adjvex);
p=p->nextarc;
}
}
}
void DepthFirstSearch(AdjList g,int v0) /*图g为邻接表类型AdjList */
{
ArcNode *p;
printf("%c",g.vertex[v0].data);
visited[v0]=True;
p=g.vertex[v0].firstarc;
while(p!=NULL)
{
if(!visited[p->adjvex])
DepthFirstSearch(g,p->adjvex);
p=p->nextarc;
}
}/*DepthFirstSearch*/
void TraverGraph(AdjList g)/*对图g进行深度优先搜索,Graph 表示图的一种存储结构,如数组表示法或邻接表等*/
{
int vi;
for(vi=0;vi<g.vexnum;vi++)
visited[vi]=Fal ;/*访问标志数组初始*/
for(vi=0;vi<g.vexnum;vi++) /*调用深度遍历连通子图的操作*/
if (!visited[vi])
DepthFirstSearch(g,vi); /*若图g是连通图,则此循环调用函数只执行一次*/
大比例尺}/* TraverGraph */
void main()
人生是什么{
AdjList G;
CreateAdjList(&G);
DaYin (G);
TraverGraph(G);
}