#include <stdio.h>//N皇后问题
#include <
stdlib.h
>
#include <stdio.h>
#include <
iostream.h
>
#include <
time.h
>
#include <dos.h>
#include<malloc.h>
typedef struct {
int *elem;
int length;
int listsize;
}Sqlist;
int InitList(Sqlist & L){//初始化
L.elem=(int *)malloc(100*sizeof(int));
if(!L.elem)
return 0;
L.length=0;
L.listsize=100;
return 1;
}
int Insert(Sqlist & L,int e){//插入
int m=0,i=0;
int *p=&L.elem[0],*j=&L.elem[0];
if(L.length==0)
{ *p=e; L.length++;return 1;}
for(i;i<L.length;i++)
if(e>=*(p+i))
m=i+1;
for(i=L.length;i>m;i--)
*(j+i)=*(j+i-1);
L.elem[m]=e;
L.length++;
return 1;
}
void Print(Sqlist &L,int n){//
遍历
打印输出
int k=1,i=0; int*p=&L.elem[0];
for(i=0;i<n*n;i++,k++){
printf("%d ",*(p+i));
if(k==n){k=0;printf("\n");}}
printf("\n\n\n\n\n\n\n");
}
int ReturnK(Sqlist &L,int k){//返回第K个元素的值
int*p=&L.elem[0];
return *(p+k-1);
}
void FuK(Sqlist &L,int k,int e){//将第k个元素赋值为e
int *p=&L.elem[0];
*(p+k-1)=e;
}
int TiaoJian(Sqlist L,int n,int &e){//是否满足皇后问题判断
int b[100];
int m=0,h=2*n;
for(int k=0;k<2*n;k++) b[k]=0;
for(int i=1;i<=n*n;i++)
if(ReturnK(L,i)==1)
{b[m]=(i-1)/n+1;m++;b[m]=i-(b[m-1]-1)*n;m++;}
for(int c=0;c<2*n;c++)
if(b[c]==0) {h=c;break;}
for( c=0;c<h-2;c=c+2)
for(int d=c+2;d<h;d=d+2)
if(b[c]==b[d]||b[c+1]==b[d+1]||b[d+1]-b[c+1]==b[d]-b[c]||b[d+1]-b[c+1]==b[c]-b[d])
return 0;
if(h==2*n){
printf("\n\n%d皇后问题第%d个排列!\n\n",n,e);e++;
}
return 1;
}
void Trial(Sqlist &L,int i,int n,int &e){//皇后问题
int j;
if(i>n){Print(L,n);}
else for(j=1;j<=n;j++){
FuK(L,n*i-n+j,1);
if(TiaoJian(L,n,e)==1)
Trial(L,i+1,n,e);
FuK(L,n*i-n+j,0);
}
}
void main(){
int k,i=0;
printf("\n\n请输入要n皇后问题个数:\n");
scanf("%d",&k);
time_t rawtime;
struct tm
* timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
Sqlist L1;
InitList(L1);
for(i=0;i<k*k;i++)
Insert(L1,0);
int e=1;
Trial(L1,1,k,e);
printf ( "The current date/time is: %s", asctime (timeinfo) );
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
printf("哈哈哈哈\(^o^)/~\n");
system("pause");
}
追问谢谢亲,这个程序有很多小错误啊,亲能否调试后无错误再发一遍呢,谢谢了
追答恩。好的。
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/d4628535e5dde711f66f57d4a5efce1b9d166156?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
不过这次我发代码,百度提示说内容太长,发不了,我就说吧,改哪些
头文件发上去百度给我排版乱了,头文件改成下面这样
#include <stdio.h>//N皇后问题
#include <stdlib.h >
#include <stdio.h>
#include <iostream>
#include <time.h >
#include <dos.h>
#include<malloc.h>
还有函数后面的注释也是的,排版给排到下一行了,你把void Print(Sqlist &L,int n)后面的注释改一下
还有这个函数int TiaoJian(Sqlist L,int n,int &e)里面的第四个for循环里的变量c没定义,for( c=0;c<h-2;c=c+2)改成for(int c=0;c<h-2;c=c+2)
追问亲,能否给每一行都标个注释吗,基础薄弱啊,每一行都是什么意思,定义的什么能写一下吗,谢谢了,最好写成word发到我的
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/b219ebc4b74543a9366e87ee1c178a82b901149e?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
麻烦了
追答恩,明天我休息一天,后天帮你做word吧,反正你现在不急着要吧
追问亲,我知道我这么问您真的很麻烦您,我是说麻烦您帮我写一下程序里面每一行都是什么意思啦,真的真的太感谢了,我需要去找老师讲给她听,她要提问的,所以你懂得,麻烦您帮我写一下可以吗,我一定采纳您的,太感谢了,麻烦您这么多
追答已经发了,请查收一下qq邮箱,如果有问题可以加我qq843094182,一起讨论哈