#include <stdio.h>
#include <stdlib.h>
#define MAX 20 //最大顶点数
typedef struct node{
int adjvex;
struct node *next;
}ENode;/*表示邻接单链表结点的数据类型*/
typedef struct {
int data;
ENode* firstedge;
}VNode; /*表示邻接表表头结点的数据类型*/
typedef struct
{
int n,e;
VNode adjlist[MAX];
}ALGraph;
/*ALGraph 表示邻接表的数据类型*/
/*—————————————————————————————————*/
/*邻接表的构建算法。根据所读入的边, 建立图的邻接表,*/
int visited[MAX] = {0} ;
void getLocal(ALGraph* g ,int *v0,int *v1){
int i =0 ;
for(i =0 ; i <g->n ;i++){
if(*v0 == g->adjlist[i].data)
*v0 =i ;
if(*v1 == g->adjlist[i].data)
*v1 =i ;
}
}
void createalgraph (ALGraph *g)
{
int i =0 ;
int v0 =0 ;
int v1 =0 ;
ENode *p ;
printf(“输入节点数和边数(n,e):”) ;
scanf(“(%d,%d)”,&g->n , &g->e) ;
for(i =0 ; i <g->n ; i++){
printf(“输入第%d个节点的信息:”,i+1);
scanf(“%d” ,&g->adjlist[i].data) ;
g->adjlist[i].firstedge = NULL ;
}
for(i =0 ; i < g->e ; i++){
printf(“输入第%d条边v0->v1:”,i+1) ;
scanf(“%d,%d”,&v0 , &v1) ;
getLocal(g,&v0,&v1) ;
p = (ENode *)malloc(sizeof(ENode)) ;
p->adjvex =v1 ;
p->next = g->adjlist[v0].firstedge ;
g->adjlist[v0].firstedge =p ;
}
}
/*—————————————————————————————————*/
/*图的深度优先遍历搜索递归算法。g为存储图的邻接表,i为遍历的初始顶点编号, */
void dfs(ALGraph* g,int i)
{
ENode *p =NULL ;
printf(“%d ” ,g->adjlist[i].data) ;
visited[i] =1 ;
p =g->adjlist[i].firstedge ;
while(p != NULL){
if(visited[p->adjvex] == 0)
dfs(g,p->adjvex) ;
p =p->next ;
}
}
void main()
{
ALGraph graph;
/*创建邻接表 */
createalgraph(&graph) ;
printf(“/n深度优先搜索结果:/n”);
/*图的深度优先遍历搜索*/
dfs(&graph,0) ;
}