dfs

来源:互联网 发布:淘宝试用报告哪里看 编辑:程序博客网 时间:2024/06/05 17:39
#include <stdio.h>#include<stdlib.h>#define MAXV 100typedef  char InfoType;typedef  char Vertex;typedef struct ANode{int adjvex;//该边终点编号 struct ANode * nextarc;//指向下一条边的指针 InfoType info;//该边的相关信息 }ArcNode;//边节点类型 typedef struct Vnode{Vertex data;//顶点信息  ArcNode * firstarc;//指向第一条边 }VNode;//邻接 表头节点类型 typedef VNode AdjList[MAXV];  //邻接表类型typedef struct{AdjList adjlist;//邻接表 int n,e;//图中顶点数  n和 边数  e }ALGraph;//完整的图邻接表类型 int visited[MAXV]={0};//标志数组ALGraph *createGraph(int n)//建立邻接表 {ALGraph *G=(ALGraph *)malloc(sizeof(ALGraph));int i,j;for(i=0;i<n;i++)  G->adjlist[i].firstarc=NULL;for(i=0;i<n;i++){    int m;    printf("输入表头%d的边节点个数:",i);scanf("%d",&m);printf("输入表头%d的此边节点数据:",i);for(j=0;j<m;j++){ArcNode *p=(ArcNode *)malloc(sizeof(ArcNode));scanf("%d",&p->adjvex); p->nextarc=G->adjlist[i].firstarc;//采用头插法插入 *p 输入数据时要反过来输 G->adjlist[i].firstarc=p;}}return G;}void DFS(ALGraph *G,int v){ArcNode *p;visited[v]=1;printf("%d",v);p=G->adjlist[v].firstarc;while(p){if(!visited[p->adjvex])//若  p->dajvex顶点未访问,递归访问它    DFS(G,p->adjvex);p=p->nextarc;//p指向顶点 v 的下一个邻接点 }}int main(int argc, char *argv[]) {ALGraph*G;int i,j,n;printf("input n:");scanf("%d",&n);G=createGraph(n);for(i=0;i<n;i++)  {   printf("从顶点%d开始遍历的优先访问序列:",i);   DFS(G,i);   for(j=0;j<n;j++)      visited[j]=0;   printf("\n");   }  return 0;}

下面是一个无向图的邻接表表示图

下面是结果:



1 0
原创粉丝点击