ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷 P1706 全排列问题(深度优先搜索)

2021-03-31 16:58:55  阅读:284  来源: 互联网

标签:输出 优先 洛谷 数字 int dfs st P1706 格式


文章目录

题目描述

原题链接: P1706

输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式

一个整数 n

输出格式

由 1 ~ n 组成的所有不重复的数字序列,每行一个序列。

每个数字保留 5 个场宽。

输入输出样例

输入
3
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

思路

主要思路:利用搜索,逐个的确定数字,最后输出

看到题意可知这就是高中所学的排列组合。从算法角度来想,这是一道简单的 dfs(深度优先搜索) 题 ,也可理解为 搜索+递归

源代码

#include<iostream>
#include<iomanip>
using namespace std;
const int N = 20;
int n;
bool st[N];		
int path[N];

void dfs(int u) {
	if (u == n) {		//当所要求的的 n 位数填满后进行输出
		for (int i = 0; i < n; i++) {
			cout << setw(5) << path[i]; 	//setw(5)表示数字之间保留五个场宽。括号()里面的数字代表场宽
		}
		cout << endl;
		return;
	}
	for (int i = 1; i <= n; i++) {
		if (!st[i]) {
			path[u] = i;		//将第 u 位填入数字 i
			st[i] = true;		//标记数字 i 已经被使用
			dfs(u + 1);			//对下一位进行填数
			st[i] = false;		//填完 n 位数后,将已标记过的数清空
		}
	} 
}

int main() {
	cin >> n;
	dfs(0);		//传入u为 0,代表从第一位开始填数
	return 0;
}


标签:输出,优先,洛谷,数字,int,dfs,st,P1706,格式
来源: https://blog.csdn.net/kochunk1t/article/details/115353521

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有