1. 代码
//============================
//无向图的遍历
//深度优先
//存储结构:邻接表
//非递归算法
//2017.9.26
//=========================
#include<stdio.h>
#include<stdlib.h>
#define MAX_VEX 100
typedef struct arcnode
{
int adjvex;
struct arcnode *next;
}ARCNODE;
typedef struct
{
//int vertex;//可以用于记录是否访问;程序用visit[]
ARCNODE *firstarc;
}VERNODE;
VERNODE adjlist[MAX_VEX];
int creat()
{
int bv, ev, vexnum, edgnum, i;
printf("input vexnum, edgnum:\n");
scanf("%d,%d", &vexnum, &edgnum);
//initialization
for(i=1; i<=vexnum; i++)
adjlist[i].firstarc=NULL;
printf("input bv,ev\n");
for(i=1; i<=edgnum; i++)
{
ARCNODE *p=(ARCNODE*)malloc(sizeof(ARCNODE));
scanf("%d,%d", &bv, &ev);
p->adjvex=ev;
p->next=adjlist[bv].firstarc;
adjlist[bv].firstarc=p;
//无向图加上以下
p=(ARCNODE*)malloc(sizeof(ARCNODE));
p->adjvex=bv;
p->next=adjlist[ev].firstarc;
adjlist[ev].firstarc=p;
}
return vexnum;
}
int visit[MAX_VEX]; //记录是否访问
void dfs(int v)
{
visit[v]=1;//vertex=1;//!!!把 = 写成 == 导致莫名其妙的错误23333
printf("%d ", v);
ARCNODE *p=adjlist[v].firstarc;
while(p)
{
if(visit[p->adjvex]==0)
dfs(p->adjvex);
p=p->next;
}
}
int main()
{
int vexnum=creat();
int i, stvex;
ARCNODE *p;
for(i=1; i<MAX_VEX; i++)
visit[i]=0;
printf("output the adjacency list built:\n");
for(i=1;i<=vexnum;i++)
{
printf("%d==>", i);
p=adjlist[i].firstarc;
while(p)
{
printf("--->%d", p->adjvex);
p=p->next;
}
printf("\n");
}
printf("input starting vertex:\n");
scanf("%d", &stvex);
printf("the DFS of graph:\n");
dfs(stvex);
return 0;
}
2. 结果