标签:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXSIZE 30 4 5 typedef struct node//邻接表结点 6 { 7 int adjvex;//邻接点域 8 struct node *next;//指向下一个邻接边结点的指针域 9 }EdgeNode;//邻接表结点类型 10 11 typedef struct vnode//顶点表结点 12 { 13 int vertex;//顶点域 14 EdgeNode *firstedge;//指向邻接表的第一个邻接边结点的指针域 15 }VertexNode;//顶点表结点类型 16 17 void CreatAdjlist(VertexNode g[],int e,int n)//建立无向图的邻接表,n为顶点数,e为边数,g[]存储n个顶点表结点 18 { 19 EdgeNode *p; 20 int i,j,k; 21 printf("Input date of vetex(0~n-1):\n"); 22 for(i=0;i<n;i++)//建立有n个顶点的顶点表 23 { 24 g[i].vertex=i;//读入顶点i信息 25 g[i].firstedge=NULL;//初始化指向顶点i的邻接表表头指针 26 } 27 for(k=1;k<=e;k++)//输入e条边 28 { 29 printf("Input edge of(i,j):"); 30 scanf("%d,%d",&i,&j); 31 p=(EdgeNode *)malloc(sizeof(EdgeNode)); 32 p->adjvex=j;//在顶点Vi的邻接表中添加邻接点为j的结点 33 p->next=g[i].firstedge;//插入是在邻接表表头进行的 34 g[i].firstedge=p; 35 p=(EdgeNode *)malloc(sizeof(EdgeNode)); 36 p->adjvex=i;//在顶点Vj的邻接表中添加邻接点为i的结点 37 p->next=g[j].firstedge;//插入是在邻接表表头进行的 38 g[j].firstedge=p; 39 } 40 } 41 42 int visited[MAXSIZE];//MAXSIZE为大于或等于无向图顶点个数的常量 43 void DFS(VertexNode g[],int i)//从指定的顶点i开始深度优化搜索 44 { 45 EdgeNode *p; 46 printf("%4d",g[i].vertex);//输出顶点i信息,即访问顶点i 47 visited[i]=1; 48 p=g[i].firstedge;//根据顶点i的指针firstedge查找其邻接表的第一个邻接边结点 49 50 while(p!=NULL)//当邻接结点不为空时 51 { 52 if(!visited[p->adjvex])//如果邻接的这个边结点未被访问过 53 DFS(g,p->adjvex);//对这个边结点进行深度优先搜索 54 p=p->next;//查找顶点i的下一个邻接边结点 55 } 56 } 57 58 void DFSTraverse(VertexNode g[],int n)//深度优先搜索遍历以邻接表存储的图,其中g为顶点表,n为顶点个数 59 { 60 int i; 61 for(i=0;i<n;i++) 62 visited[i]=0;//访问标志置0 63 for(i=0;i<n;i++)//对n个顶点的图查找未访问过的顶点并由该顶点开始遍历 64 if(!visited[i])//当visited[i]等于0时即该顶点i未访问过 65 DFS(g,i);//从未访问过的顶点i开始遍历 66 } 67 68 void main() 69 { 70 int e,n; 71 VertexNode g[MAXSIZE];//定义顶点表结点类型数组g 72 printf("Input number of node:\n");//输入图中结点个数 73 scanf("%d",&n); 74 printf("Input number of edge:\n");//输入图中边的个数 75 scanf("%d",&e); 76 printf("Make adjlist:\n"); 77 CreatAdjlist(g,e,n);//建立无向图的邻接表 78 printf("DFSTraverse:\n"); 79 DFSTraverse(g,n);//深度优先遍历以邻接表存储的无向图 80 printf("\n"); 81 }
说明:
标签:
原文地址:http://www.cnblogs.com/wxdjss/p/5497702.html