📄 011.cpp
字号:
#include<iostream.h>
#include<time.h>
#include<stdlib.h>
void main()
{ int n,flag=0,l=0,g[20];
clock_t start_time,end_time;
cout<<"请输入要求解的皇后数";
cout<<endl<<"n=";
cin>>n;
int *col,*md,*sd,*q,m,pp=0;
col=new int[n]; if(!col) exit(0);// 数组,各列有无皇后(0,1)
md=new int[2*n-1]; if(!md) exit(0); //数组,各主对角线有无皇后(0,1)
sd=new int[2*n-1]; if(!sd) exit(0);//数组,各次对角线有无皇后(0,1)
q=new int[n]; if(!q) exit(0);//数组,第i行上皇后在第几列(0,n-1)
int i,j,k=0,w;
// int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19;
for(i=0;i<n;i++) col[i]=q[i]=0;
for(i=0;i<2*n-1;i++) md[i]=sd[i]=0;
for(i=0;i<20;i++)g[i]=0;
j=0;
start_time=clock();//cout<<start_time<<endl;
loop1: for(i=0;i<n;i++)
{ //cout<<"i="<<i<<" "<<j;
flag=0;
if(j == 0)
{ for(w=0;w<n;w++) col[w]=q[w]=0;
for(w=0;w<2*n-1;w++) md[w]=sd[w]=0;
}
if(!col[i]&&!md[n+i-j-1]&&!sd[i+j])//1
{
col[i]=md[n+i-j-1]=sd[i+j]=1;
q[j]=i;//cout<<i;
j++;
}
else if(i < n-1)continue;
else if(i == n-1)
{
if(!col[i]&&!md[n+i-j-1]&&!sd[i+j])
{
col[i]=md[n+i-j-1]=sd[i+j]=1;
j++;
q[j]=i;
} else
{ i=q[j-1];
loop2: if(i == n-1)
{
if(j>1)
{
i=q[j-2];
j=j-2;
col[i]=md[n+i-j-1]=sd[i+j]=0;
m=q[j+1];
col[m]=md[n+m-j-2]=sd[m+j+1]=0;
flag=1;
}else if(j == 1)
{i=q[j-1];
col[i]=md[n+i-j-1]=sd[i+j]=0;
flag=1;
}else if((j ==0 ) && (i == n-1))goto loop;else
goto loop1;
}
else
{
if(j>0)
{ j--;
// q[j]=0;
col[i]=md[n+i-j-1]=sd[i+j]=0;
flag=1;}else if((j == 0) && (i == n-1))goto loop;
else
goto loop1;
}
}
} //1
if(flag == 1)continue;
else
{
if(j == n)
{
k++;
if(n%2 == 0)
{if(q[0] == n/2)
{ for(m=0;m<n;m++)g[m]=n-q[m];
k=k-1;
goto loop;
}else ;
}
else
{if((q[0]==n/2)&&(q [1]> n/2))
{ for(m=0;m<n;m++)g[m]=n-q[m];
k=k-1;
goto loop;
}else ;
}
m=q[n-2];
col[m]=md[n+m-j+1]=sd[m+j-2]=0;
col[i]=md[n+i-j]=sd[i+j-1]=0;
q[n-1]=0;
q[n-2]=0;
j=j-2;
i=m;
if(i == n-1){i=q[j-1]; goto loop2;}
}
else {if(j < n) i=-1;}
}
}
loop: end_time=clock();
cout<<"n="<<n<<"共有"<<k*2<<"个解"<<endl;
cout<<"用的时间是"<<end_time-start_time<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -