SHAOXIAOJ正在加载中...

2630: 回溯法-全排列问题

金币值:3 定数:8 时间限制:1.000 s 内存限制:128 M
解决:2 提交:2 正确率:100.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 来源/分类: 算法设计

题目描述

输入一个整数n(1<=n<=9)表示有n个不同的物品,要求输出这些物品所有可能的排列(用1-n分别表示n个物品的编号)

测试代码   复制

# include <stdio.h>

int x[10]; // 0号单元不用
int n;

void output() {
	int i;
	for(i=1; i<=n; i++) printf("%d ",x[i]);
	printf("\n");
}

void swap(int &x, int &y) { // 交换两个数
	int t=x;
	x=y;
	y=t;
}

void backtrack(int i) {

	if(i==n) { // 此处写成if(i>n)也可以,因为只剩下最后一个元素没有处理时可以结束递归也可以继续递归
		output();
	} else {
		
	}
}

int main(void) {
	int i;

	scanf("%d",&n);

	for(i=1; i<=n; i++) x[i]=i; // 初始化解向量

	backtrack(1);

	return 0;
}

输入

第一行输入一个整数

输出

每行依次输出这些物品编号对应的一种排列

样例输入    复制

3

样例输出    复制

1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2