一道基础的bfs,要求相邻元素之和不是素数,菜鸡看错了题目,写了好久才ac;
这里还有一个值得注意的是memset函数,
void *memset(void *ptr,int value, size_t num);
ptr:指向要填充的内存区域的指针。
value:要设置的值。它将转换为unsigned char类型,然后写入每个字节。
num:要填充的字节数。
memset函数返回指向第一个元素的指针。
#include<bits/stdc++.h>
using namespace std;
int s=0,n;
bool fu[15];
void dfs(int p,int u)
{
if (u==n)
{
s++;
return ;
}
for(int i=1; i<=n; i++)
{
if(!fu[i])
{
for(int j=2; j*j<=(i+p); j++)
{
if((i+p)%j==0)
fu[i]=true;
}
if(fu[i]==false)
continue;
dfs(i,u+1);
fu[i]=false;
}
}
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
memset(fu,0,sizeof fu);//这里给fu设置成false要用0,设置成-1打印出来的值为255,反码...
fu[i]=1;
dfs(i,1);
}
cout<<s;
}