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
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- DFS
- DFS
- dfs
- DFS
- dfs
- dfs
- dfs
- dfs
- 数论_1
- 尝试向分析类转型2--工具使用
- 快速掌握Lua 5.3 —— 字符串库 (3)
- xml之CDATA
- STM32中GPIO的8种工作模式详解
- dfs
- java 注解的基本原理和编程实现
- Hive 初识
- Ubunut No apport report written because the error message indicates its a followup error from a prev
- ubuntu14.04 安装搜狗输入法
- Iteratee概念
- 各种数据库JDBC 连接方式
- Java的注解机制——Spring自动装配的实现原理
- 词袋模型基本原理(Bag of words)