博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图解全排列问题_递归实现全排列
阅读量:5976 次
发布时间:2019-06-20

本文共 637 字,大约阅读时间需要 2 分钟。

递归实现全排列

问题

把 1~n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式

一个整数n。

输出格式

按照从小到大的顺序输出所有方案,每行1个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1≤n≤9

输入样例:

3

输出样例:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

递归图示

55c25af186d6ccb66a6e83664928f036.png

代码(时间复杂度(O(n*n!))

#include

const int N = 10;

int state[N]; // 0:表示没放数,1~n:表示放了哪个数

bool used[N]; //true:表示用过,false:表示未使用

int n;

void dfs(int u)

{

if (u == n + 1)

{

for (int i = 1; i <= n; i ++)

printf("%d ", state[i]);

printf("\n");

return;

}

for (int i = 1; i <= n; i ++)

{

if (!used[i])

{

state[u] = i;

used[i] = true;

dfs( u + 1);

//恢复现场

state[u] = 0; //可以去掉

used[i] = false;

}

}

}

int main()

{

scanf("%d", &n);

dfs(1);

return 0;

}

转载地址:http://aaiox.baihongyu.com/

你可能感兴趣的文章
介绍一款facebook信息收集工具FBI
查看>>
五分钟创建一个自己的NPM包
查看>>
我的友情链接
查看>>
Spring Cloud Netflix—如何加入Hystrix
查看>>
万物根源-一分钟教你发布npm包
查看>>
SkyWalking之高级玩法
查看>>
iOS多线程编程:线程同步总结 NSCondtion
查看>>
Flutter开发环境安装
查看>>
QQ登录的那些坑(如何开发qq登陆功能)
查看>>
中大型网站技术架构演变过程
查看>>
深入剖析OkHttp系列(五) 来自官方的事件机制
查看>>
Java 9 CompletableFuture 进化小脚步
查看>>
【前端词典】进阶必备的网络基础(下)
查看>>
Sigo全面适合交易新手以及专业交易者
查看>>
AppLaunchScreen/Screenshot(启动图/屏幕快照)输出规范
查看>>
React状态管理大乱斗,横向对比Dva,Rematch,Mirror
查看>>
ARTS训练第三周
查看>>
基本操作题
查看>>
unicone 字体 规范
查看>>
浅显易懂的跨域理解
查看>>