问题描述:
求n个数(1~n)的全排列。例:求1、2的全排列,结果为:1、2和2、1。
解题思路:
用DFS进行搜索,有点类似于之前总结的找棋盘所有可能摆放棋子的总方案数。
这个是找几个数的排列的各种情况。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int n;
int vis[10],a[10];
void dfs(int pos)//pos记录位置,也就是说从a[pos]开始进行搜索
{
if(pos==n)
{
for(int i=0;i<n;i++)
cout<<a[i];
cout<<endl;
return;
}
for(int j=1;j<=n;j++)
{
if(vis[j]==0)//如果这个点还没有被访问
{
vis[j]=1;//标记已访问
a[pos]=j;//这一步是重中之重 ,注意是a[pos]=j,
dfs(pos+1);
vis[j]=0;//改回来
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}
最近等于和赋值有点迷……好低级的错误……