[C] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
int a[21];
int a1[10];
int r;
int n,cnt,s;
int b[21];
int display2(int a[]);
int c[5][9];
bool sushu(int n)
{
for(int i=2;i<n;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
void display(int a[],int n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<' ';
}
}
void search1(int n,int m)
{
for(int i=2;i<=m;i++)
{
if(b[i]==0&&sushu(a[n-1]+i))
{
a[n]=i;
b[i]=1;
if(n==m&&sushu(a[n]+1))
{
display(a,n);
cout<<endl;
b[i]=0;
}
else
{
search1(n+1,m);
b[i]=0;
}
}
}
}
void sushuhuan()//素数环
{
cin>>n;
a[1]=1;
b[1]=1;
search1(2,n);
}
void search2(int k)
{
for(int i=1;i<=n;i++)
{
if(b[i]==0)
{
a[k]=i;
b[i]=1;
if(k==r)
{
display(a,r);
cnt++;
cout<<endl;
b[i]=0;
}
else
{
search2(k+1);
b[i]=0;
}
}
}
}
void pailie()//排列
{
cin>>n>>r;
search2(1);
cout<<cnt;
}
void search3(int k)
{
for(int i=1;i<n;i++)
{
if(s+i<=n&&i>=a1[k-1])
{
s+=i;
a1[k]=i;
if(s==n)
{
for(int j=1;j<k;j++)
{
cout<<a1[j]<<"+";
}
cout<<a1[k]<<endl;
}
else
{
search3(k+1);
}
s-=i;
}
}
}
void chaifen()//拆分
{
cin>>n;
a1[0]=1;
search3(1);
}
bool check(int i,int j)
{
for(int k=0;k<8;k++)
{
if((i==k||j==b[k]||abs(i-k)==abs(j-b[k]))&&b[k]>=0)
{
return false;
}
}
return true;
}
void search4(int n)
{
for(int k=0;k<8;k++)
{
if(check(k,n))
{
b[k]=n;
if(n==7)
{
cnt++;
display2(b);
}
else
{
search4(n+1);
}
b[k]=-1;
}
}
}
int display2(int a[])
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(a[i]==j)
{
cout<<'@';
}
else
{
cout<<'-';
}
}
cout<<endl;
}
cout<<endl;
}
void eightqueen()
{
memset(b,-1,sizeof(b));
search4(0);
cout<<cnt;
}
void display3(int a[],int a1[],int n)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<','<<a1[i]<<"->";
}
cout<<endl;
}
void search5(int x,int y,int n)
{
int x1[4]={2,1,-1,-2};
int y1[4]={1,2,2,1};
for(int i=0;i<4;i++)
{
if((x+x1[i])>=0&&(x+x1[i])<=4&&(y+y1[i])>=0&&(y+y1[i])<=8)
{
a[n]=x+x1[i];//行
a1[n]=y+y1[i];//列
if(a[n]==4&&a1[n]==8)
{
display3(a,a1,n);
}
else
{
search5(a[n],a1[n],n+1);
}
}
}
}
void madebianli()
{
search5(0,0,1);
}
void display4(int c[][9])
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<c[i][j]<<' ';
}
cout<<endl;
}
}
void search6(int n,int x,int y)
{
int x1[8]={2,1,-1,-2,-2,-1,1,2};
int y1[8]={1,2,2,1,-1,-2,-2,-1};
for(int i=0;i<5;i++)
{
if((x+x1[i])>=0&&(x+x1[i])<=4&&(y+y1[i])>=0&&(y+y1[i])<=4)
{
c[x+x1[i]][y+y1[i]]=n;
if(n==25)
{
display4(c);
}
else
{
search6(n+1,x+x1[i],y+y1[i]);
}
}
}
}
void tiaoma()
{
search6(1,0,0);
}