https://blog.csdn.net/sddxqlrjxr/article/details/51084930
#include <stdlib.h> #include <stdio.h> #define N 4 //定义图中点个数 int a[N][N] = {{-1,1,1,-1},{1,-1,-1,1},{1,-1,-1,1},{-1,1,1,-1}}; //邻接矩阵,-1无边 int label[N] = {0}; //标记数组,0未标记 //定义栈及其方法 struct Stack { int a[4]; //存入栈元素 int top; //栈顶指针 }; typedef struct Stack Stack; void addStack(Stack *s, int data) //入栈 { s->top++; s->a[s->top] = data; } int delStack(Stack *s) //出栈 { return s->a[s->top--]; } int getTop(Stack *s) //得到栈顶元素 { return s->a[s->top]; } //使用栈的非递归DFS void dfs(int start) { Stack *s = (Stack *)malloc(sizeof(Stack)); s->top = -1; printf("%d ", start); label[start] = 1; addStack(s, start); while(s->top != -1) { int tmp = getTop(s); int i; for(i=0; i<4; i++) { if(a[tmp][i] == 1 && label[i] == 0) { printf("%d ", i); label[i] = 1; addStack(s, i); break; //此处必须有break,否则构不成DFS } } if(i == 4) delStack(s); } free(s); } int main() { dfs(0); return 0; }
