深度优先搜索非递归实现
2013-10-16 12:43
295 查看
源代码如下:
/* dfs.c */ #include <stdio.h> #include "stack.h" #define N 6 struct adj_matrix { int vertex ; int edge ; }; struct adj_matrix matrix = { {1, 2, 3, 4, 5, 6}, {{0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 1}} }; int visit = {0, 0, 0, 0, 0, 0}; void dfs(struct adj_matrix *G) { int i, j; int x; for (i = 0; i < N; i++) { if (visit[i] != 1) { visit[i] = 1; printf("%3d", G->vertex[i]); push(i); while (!stack_empty()) { x = pop(); for (j = 0; j < N; j++) { if (G->edge[x][j] == 1 && visit[j] != 1) { visit[j] = 1; printf("%3d", G->vertex[j]); push(j); break; } } } } } } int main(void) { dfs(&matrix); printf("\n"); return 0; }其中使用到了栈,栈部分代码如下:
/* stack.c */ #include <stdio.h> #include <limits.h> #define STACK_LENGTH 128 struct stack { int top; int buf[STACK_LENGTH]; }; struct stack S; int stack_empty(void) { return S.top == 0; } int stack_full(void) { return S.top == STACK_LENGTH; } int pop(void) { if (stack_empty()) { printf("Stack underflow!\n"); return INT_MIN; } return S.buf[--S.top]; } /*int gettop(void) { if (stack_empty()) { printf("Stack underflow!\n"); return INT_MIN; } return S.buf[S.top - 1]; }*/ void push(int x) { if (stack_full()) { printf("Stack overflow!\n"); return; } S.buf[S.top++] = x; }头文件为:
/* stack.h */ #ifndef __STACK_H #define __STACK_H /* Stack API */ int stack_empty(void); int stack_full(void); int pop(void); //int gettop(void); void push(int x); #endif /* __STACK_H */
相关文章推荐
- 图的深度优先,完全搜索...有点脑残....java实现
- java-二叉树广度优先实现、深度优先之前序实现(非递归)
- 最大流与最小割C++实现2——深度优先搜索
- C++深度优先搜索的实现方法
- 算法基础之python实现深度优先搜索的数独问题
- 深度优先搜索 走迷宫 java实现
- 深度优先搜索DFS(邻接表实现)
- 深度优先搜索DFS-C语言实现、思路/解析-简笔
- 深度优先搜索和广度优先搜索的代码实现
- (算法入门)基本图论-深度优先搜索之JAVA实现
- 深度优先搜索的实现及本质
- 深度优先搜索的实现
- 深度优先搜索的实现
- 【图的实现】“广度优先搜索遍历”以及“深度优先搜索遍历”必会
- Java实现图:邻接矩阵表示、深度优先搜索、广度优先搜索、无向图的最小生成树
- 深度优先搜索的实现
- 图的深度优先(非递归)、广度优先、最小生成树的C++实现
- 【二叉树遍历算法】——广/深度优先搜索的实现
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- 深度优先搜索迷宫路径算法的实现