C语言实现,图的深度优先、广度优先搜索【递归】

/*广度优先*/
void BFS()
{
        int i, p;
        if (stack_is_empty(a)&&stack_is_empty(b))
        {   
                putchar('\n');
                return;
        }   
        else    
                p = dequeue(a);
        printf("%d ", p); 
        for(i = 0;i < NUM;i++)
                if (path[p][i] == 1)
                        enqueue(i);
        BFS();
}

/*深度优先
程序始终只有一个元素在栈a内,所以完全可以不用栈结构,直接将变量作为递归函数的参数,不过递归函数的思想为栈的思想*/
void DFS()
{
        int i, p;
            
        p = stack_pop(a);
        printf("%5d", p); 
        for(i = 0;i < NUM;i++)
                if (path[p][i] == 1) {
                        stack_push(a, i); 
                        DFS();
        }   
}

int main(int argc, char *argv[])
{
        a = init(a);
        b = init(b);
        enqueue(0);
        BFS();

        /*
        stack_push(a, 0);
        DFS();*/
        return 1;
}

注:案例中用到,stack_push等函数,在其他文章中有定义

深度优先, 通过栈(先进后出)实现 

广度优先, 通过队列(先进先出)实现

你可能感兴趣的:(C语言实现,图的深度优先、广度优先搜索【递归】)