Description:
题目大意:找一个特殊的排列,数字只含有 1~n,且唯一,要求下标和数字不同,结果不唯一。
解题思路:
算法标签:DFS
简单DFS一下,标记使用过的数字即可。
代码:
// TSWorld
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int N = 105;
int n;
int number[N];
bool vis[N];
bool isresult;
void dfs(int tot) {
bool issearch = false;
if(tot > n)
{
for(int i = 1;i <= n;i++)
if(i != 1)
cout<<" "<<number[i];
else
cout<<number[i];
cout<<endl;
isresult = true;
return;
}
if(isresult)
return;
for(int i = 1;i <= n;i++)
{
if(!vis[i] && i != tot)
{
vis[i] = true;
number[tot] = i;
dfs(tot+1);
vis[i] = false;
}
}
}
int main()
{
int T = 0;
cin>>T;
while(T--) {
scanf("%d",&n);
memset(number,0,sizeof(number));
isresult = false;
dfs(1);
}
return 0;
}