图的深度优先搜索遍历

来源:互联网 发布:网络手势的含义带图片 编辑:程序博客网 时间:2024/05/28 06:06

1. 代码

//============================ //无向图的遍历//深度优先 //存储结构:邻接表 //非递归算法 //2017.9.26 //========================= #include<stdio.h>#include<stdlib.h>#define MAX_VEX 100typedef 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. 结果

原创粉丝点击