题目链接: https://leetcode.com/PRoblems/beautiful-arrangement/?tab=Description
代码如下:
#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;///定义的全局数组,需要进行回溯 } } }}新闻热点
疑难解答