使用栈实现DFS(非递归DFS)

来源:互联网 发布:清茶淘宝助手充值卡 编辑:程序博客网 时间:2024/05/17 23:40
图片摘自:点击打开链接


#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];}//使用栈的非递归DFSvoid 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;}


0 0
原创粉丝点击