描述
代码
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sum;
int aa[20];
int vis[20];
void search(int cur,int n)
{
if(cur==n+1)
{
sum++;
}
else
{
for(int i=1; i<=n; i++)
{
int ok=1;
aa[cur]=i;
if(aa[cur]%cur!=0&&cur%aa[cur]!=0)
{
continue;
}
for(int j=1;j<cur;j++)
{
if(aa[j]==aa[cur])
{
ok=0;
break;
}
}
if(ok)
search(cur+1,n);
}
}
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(vis,0,sizeof(vis));
sum=0;
search(1,n);
printf("%d\n",sum);
}
}
search函数二:
void search(int cur,int n)
{
if(cur==n+1)
{
sum++;
}
else
{
for(int i=1; i<=n; i++)
{
int ok=1;
if(!vis[i]&&(i%cur==0||cur%i==0))
{
aa[cur]=i;
vis[i]=1;
search(cur+1,n);
vis[i]=0;///定义的全局数组,需要进行回溯
}
}
}
}