2139 - 【搜索基础】全排列问题

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

全排列问题 form.pas/c/cpp

<span style="font-size:18px;">&nbsp; 输出自然数1~n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复数字。<br />

[输入格式]  

<span style="font-size:18px;">&nbsp; &nbsp;1&lt;=n&lt;=9<br />

[输出格式]
   由1~n组成的所有不重复的数字序列。每行一个序列
[输入样例]
3
[输出样例]
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

<br />

<br />

<br />

题目输入

题目输出

输入/输出样例

输入格式


                        

输出格式


                        

C语言解答

#include<stdio.h>
int a[1000],v[1000],n;
void print(){
	int i,total=0;
  for (i=1;i<=n;i++) if(total==0) printf("%d",a[i],total++);
  else printf(" %d",a[i]); //将每位输出 
  printf("\n"); //换行 
}

void DFS(int dep){
int i;
  if (dep==n) print(); //如果搜到一个结果输出 
  dep++; //查找当前要处理位 
  for (i=1;i<=n;i++) { //枚举当前位 
   if (v[i]) continue; //如果这个数之前被选过就跳过 
   v[i]=1; //选中当前位 
   a[dep]=i;//将当前位存入数组 
   DFS(dep);//搜索下一位 
   v[i]=0;//取消选中当前位 
  }
}

int main(){
  scanf("%d",&n); //读入
  DFS(0); //深搜
  return 0;
  system("pause"); //暂停(查看结果) 
}

C++解答

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
bool a[11]={0};
int b[11];
int print()
{
	for(int i=1;i<=n-1;++i)
	{
		printf("%d ",b[i]);
	}
	printf("%d\n",b[n]);
}
int search(int i)
{
	for(int j=1;j<=n;++j)
	{
		if(a[j]==0)
		{
			b[i]=j;
			a[j]=1;
			if(i==n)
			{
				print();
			}	
			else
			{
				search(i+1);
			}
			a[j]=0;
		}
	}
}

int main()
{
	cin>>n;
	search(1);
	return 0;
	
}

Java解答

import java.util.Scanner;

public class Main {
	static int n = 0;
	static int [] book,a;
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		n = cin.nextInt();
		book = new int[n+1];
		a = new int[n+1];
		for(int i = 0; i <= n; i ++) 
			book[i] = 0;
		dfs(1);
	}
	public static void dfs(int i) {
		if(i>n) {
			for(int k = 1; k <= n; k++) {
				System.out.print(a[k]);
				if(k != n) {
					System.out.print(" ");
				}else {
					System.out.println();
				}
			}
		}else {
			for(int k = 1; k <= n; k ++) {
				if(book[k]==0) {
					book[k] = 1;
					a[i] = k;
					dfs(i+1);
					book[k] = 0;
				}
			}
		}
	}
}