从前N个正整数中取M个的所有排列,但相邻位置上数字要求互质。按照字典序从小到大输出。
输入格式
一行2个正整数N和M, 0< M <= N <8
输出格式
每行一个排列。
输入/输出例子1
输入:
4 3
输出:
1 2 3
1 3 2
1 3 4
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
3 1 2
3 1 4
3 2 1
3 4 1
4 1 2
4 1 3
4 3 1
4 3 2
样例解释
无
#include<bits/stdc++.h>
using namespace std;
int n,m;
bool inuse[9];
int ans[9];
bool hz(int a,int b)
{
if(a%2!=0||b%2!=0)
if(a%3!=0||b%3!=0)
if(a%5!=0||b%5!=0)
if(a%7!=0||b%7!=0)
return true;
return false;
}
void A(int i)
{
if(i==m+1)
{
for(int j=1;j<=m;j++)
{
cout<<ans[j]<<' ';
}
cout<<endl;
return ;
}
for(int j=1;j<=n;j++)
{
if(inuse[j]==false&&(hz(ans[i-1],j)||i==1))
{
inuse[j]=true;
ans[i]=j;
A(i+1);
inuse[j]=false;
}
}
}
int main(){
cin>>n>>m;
A(1);
return 0;
}