2630: 回溯法-全排列问题
金币值:3
定数:8
时间限制:1.000 s
内存限制:128 M
解决:2
提交:2
正确率:100.00% 命题人:
题目描述
输入一个整数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