DFS(Depth First Search)深度优先搜索算法

基本概念:

  深度优先搜索算法:一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点V的所在边都已被搜寻过或者在搜寻时节点不满足,搜索将回溯到发现节点V的那条边的起始节点。整个过程反复进行直到所有节点都被访问为止。最糟糕时算法复杂度O(!n)。

输入样例:

6
a c b d e f 

输出样例:

a
c
b
d
e
f

提交:

#include <iostream>
#include <string.h>
using namespace std;
//全排列,n个字符依次放入n个箱子中,首先检查箱子是否为空,手中还有什么字符,放进去并标记。
//放完一次恢复初始状态,当到n+1各箱子时,一次排列结束
int n;
char a[6];
char re[6];
int vis[6];

void dfs(int step) {
    int i;
    if (step == n+1) {//判断边界
        for (i=1; i<=n; i++)
            printf("%c",re[i]);
        printf("\n");
        return ;
    }
    for (i=1;i<=n;i++) {//遍历每一种情况
        if (vis[i] == 0) {//check满足
            re[step] = a[i];
            vis[i]=1;//标记
            dfs(step+1);//继续搜索
            vis[i]=0;//恢复初始状态
        }
    }
    return;
}

int main() {
    int T;
    scanf("%d",&T);
    getchar();
    while(T--){
        memset(a,0,sizeof(a));
        memset(vis,0,sizeof(vis));//对存数据的数组分别初始化
        scanf("%s",a+1);
        n = strlen(a+1);
        dfs(1);//从第一个箱子开始
    }
    return 0;
}

 

posted @ 2021-08-06 16:58  白玉神驹  阅读(130)  评论(0编辑  收藏  举报