#include <cstdio>
#include <cstdlib>
#define MaxNum 10 //最大顶点数
int visited[MaxNum];
//表结点
typedef struct endoe
{
int adjvex;
endoe *next;
}endoe;
//定点结点
typedef struct vnode
{
char vertex;
endoe * first_edge;
}node;
//图结构
typedef struct ALGraph
{
vnode adj_list[MaxNum];
int n,e;
} ALGraph;
//定位顶点Vex的下标位置
int Locate_vex(ALGraph* G,char vex)
{
for(int i=0;i<G->n;++i)
if(G->adj_list[i].vertex==vex)
return i;
}
//创建图
void CreateGraph(ALGraph * G)
{
endoe* temp=NULL;
int vex1,vex2;
int i,j,k;
int old_i=-2,old_j=-2;
printf("\n请输入有向图的顶点名称:");
for(i=0;i<G->n;++i)
{
scanf("\n%c",&G->adj_list[i].vertex);
G->adj_list[i].first_edge=NULL;
}
printf("\n请输入有向图中每条弧的弧尾顶点和弧头顶点名称:\n");
for(k=1;k<=G->e;++k)
{
printf("\n请输入第 %d 条弧的弧尾顶点名称:",k);
scanf("\n%c",&vex1);
printf("请输入第 %d 条弧的弧头顶点名称:",k);
scanf("\n%c",&vex2);
i=Locate_vex(G,vex1);
j=Locate_vex(G,vex2);
temp=(endoe*)malloc(sizeof(endoe));
temp->adjvex=j;
temp->next=G->adj_list[i].first_edge;
G->adj_list[i].first_edge=temp;
}
}
//打印图的信息
void PrintGraph(const ALGraph * G)
{
int i;
endoe* temp=NULL;
printf("\n\n有向图有 %d 个顶点:",G->n);
for(i=0;i<G->n;++i)
printf(" %c ",G->adj_list[i].vertex);
printf("\n\n有向图有 %d 条弧:",G->e);
for(i=0;i< G->n;++i)
{
printf("\n%c -> ",G->adj_list[i].vertex);
temp=G->adj_list[i].first_edge;
while(temp)
{
printf("%c ",G->adj_list[temp->adjvex].vertex);
temp=temp->next;
}
}
printf("\n");
}
void DFS(ALGraph *G,int v)
{
endoe* p;
printf("%c ",G->adj_list[v].vertex);
visited[v]=1;
p=G->adj_list[v].first_edge;
while(p)
{
if(!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void DFSTraverse(ALGraph* G)
{
for(int i=0;i< G->n;++i)
visited[i]=0;
for(int i=0;i< G->n;++i)
if(!visited[i])
DFS(G,i);
}
//测试代码
int main()
{
ALGraph G;
printf("\n有向图的邻接表结构存储.....");
printf("\n\n请输入有向图的顶点数:");
scanf("%d",&G.n);
printf("\n请输入有向图有多少条弧:");
scanf("%d",&G.e);
CreateGraph(&G);
PrintGraph(&G);
printf("\n深度优先遍历顺序:");
DFSTraverse(&G);
printf("\n\n");
return 0;
}
有向图邻接表的深度优先遍历
原文作者:数据结构之图
原文地址: https://blog.csdn.net/qq1120815657/article/details/45152965
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq1120815657/article/details/45152965
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。