排列数字[全排列]

把搜索的过程想象成一棵树,一共有n个位置需要填写,我们的顺序是从第一个位置开始向后填写,在过程中需要注意记录哪些数字还没有填写,还有,记得恢复状态

//枚举第u个位置
void dfs(int u)
{
	if(已经遍历完)
    {
    	输出结果;
        return;
    }
    for()
    {
    	遍历每个可能转移到的状态;
        做出改变;
        dfs(下一层);
        恢复状态;
    }
}
//全排列问题
#include<iostream>

using namespace std;

const int N = 10;

int n;
int path[N];
bool st[N];//true表示这个点已经被使用过了

void dfs(int u)
{
    if(u == n)
    {
        for(int i = 0; i < n; i++)
            cout << path[i] <<" ";
        cout << endl;
        return;
    }
    for(int i = 1; i <= n; i++)
    {
        if(!st[i])
        {
            path[u] = i;//填写第u个位置
            st[i] = true;
            dfs(u+1);//进入下一层
            //恢复状态
            path[u] = 0;
            st[i] = false;
        }
    }
}

int main()
{
    cin >> n;
    dfs(0);
    return 0;
}
全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 11:16
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务