深度优先搜索算法—DFS
来源:互联网 发布:前端wap 淘宝页面模板 编辑:程序博客网 时间:2024/06/05 08:01
深度优先搜索算法—DFS
图的遍历方法主要有两种:深度优先搜索遍历(DFS)和广度优先搜索遍历
DFS
深度优先搜索遍历类似于树的先序遍历,尽可能从纵深方向进行搜索,简单来说,DFS就是想找到最长的路径,基本思想是从图某个顶点
首先看一下邻接表的数据结构:
typedef struct Node { int vertex; struct Node* next;}Node; //存放链表中的结点信息typedef struct head { char data; Node *first;}Head, *Graph; //Graph是一个指向邻接表的指针(指向了一个数据类型为Head的数组)
下图是一个邻接表的图示:
下面就需要建立这样一个邻接表:
Graph createGraph() { Graph h = (Graph)malloc(sizeof(Head) * Num); //建立数组部分 int i = 0; for(i = 0; i < Num; i++) { h[i].data = i + 65; h[i].first = createLink(); } return h;}Node* createLink() { //建立右边的链表部分 Node *nod = NULL; int n; int index; Node *node; Node *p; printf("请输入结点的个数: \n"); scanf("%d", &n); printf("请输入结点的下标: \n"); scanf("%d", &index); nod = (Node *)malloc(sizeof(Node)); nod->next = NULL; nod->vertex = index; p = nod; while(--n) { printf("请输入结点的下标: \n"); scanf("%d", &index); node = (Node *)malloc(sizeof(Node)); node->next = p->next; node->vertex = index; p->next = node; p = node; } return nod;}
DFS算法:
void DFS(Graph graph, int begin) { //从begin节点出发,递归深度遍历连通图 int i; printf("%c ", graph[begin].data); visted[begin] = 1; for(i = firstVertex(graph, begin); i >= 0; i = nextVertex(graph, begin, i)) { if(!visted[i]) { DFS(graph, i); } }}
void DFSTravel(Graph graph, int begin) { //从begin开始深度优先搜索遍历图 int i; for(i = 0; i < Num; i++) { visted[i] = 0; } DFS(graph, begin); for(i = 0; i < Num; i++) { if(!visted[i]) { DFS(graph, i); } }}
其它函数:
int nextVertex(Graph graph, int pos, int cur) { //找到pos对应的邻接结点cur,然后返回它的下一个邻接结点的序号 Node *p = graph[pos].first; while(p->vertex != cur) { p = p->next; } if(p->next) { return p->next->vertex; } else { return -1; }} int firstVertex(Graph graph, int pos) { //找到pos对应的第一个邻接结点的序号 if(graph[pos].first) { return graph[pos].first->vertex; } else { return -1; }}void showGraph(Graph graph) { //展示邻接表 Node *p = NULL; int i; for(i = 0; i < Num; i++) { printf("%c ", graph[i].data); p = graph[i].first; while(p) { printf("%d ", p->vertex); p = p->next; } printf("\n"); } }
结果示例:
今天创建邻接表的时候,实在是没想到一次就成功的创建了邻接表,看来还是得认真 ^_^
下载链接:http://download.csdn.net/detail/dear_mr/9823146
0 0
- 深度优先搜索算法—DFS
- 深度优先搜索(DFS)算法
- 算法 DFS深度优先搜索
- DFS(深度优先搜索算法)
- 深度优先搜索(DFS)算法
- DFS深度优先搜索算法
- 深度优先搜索(DFS) 算法
- DFS深度优先搜索算法
- 深度优先搜索DFS算法
- 深度优先DFS搜索算法
- 详解ACM基础算法—DFS深度优先搜索算法
- (DFS算法)深度优先搜索算法
- 《图论》——深度优先搜索算法(DFS)
- 【算法入门】深度优先搜索(DFS)
- 【算法入门】深度优先搜索(DFS)
- 【算法入门】深度优先搜索(DFS)
- 【算法】深度优先搜索(DFS)I
- 【算法】深度优先搜索(DFS)II
- Leetcode Week9
- C# 枚举(Enum)
- 写给自己
- AngularJS教程 AngularJS从0到1——HelloWorld
- C# 类(Class)
- 深度优先搜索算法—DFS
- Android商品展示小案例
- JAVA代码优化常用方法
- java性能优化注意的几个细节规则
- Lattice Point or Not
- JAVA设计模式之单例模式
- Redis源码剖析和注释(十)--- 列表键命令实现(t_list)
- 我的编程规范
- LaTex特殊符号