公务员都要体能测试吗:八皇后问题的遗传算法解法,c语言编写

来源:百度文库 编辑:查人人中国名人网 时间:2024/03/29 04:53:13
用遗传算法解决八皇后问题

#include <stdlib.h>
#include<math.h>
#include<conio.h>
#include<stdio.h>

int N=0;
int a[10][10];
int yp=1;
FILE * fp;
void main()
{
int *pa;
int m,n,f,aa;
int check(),reback();
int prt();
clrscr();
fp=fopen("data.dat","w");
printf("please input the number of queens(4--10):");
scanf("%d",&N);
for(m=0;m<N;m++)
for(n=0;n<N;n++)
a[m][n]=0;

m=0;n=0;aa=0;

do{for(n=0;n<N;n++)
{
f=check(m,n);
if(m==N-1 && f==1){a[m][n]=1; prt();f=0;a[m][n]=0;}
if(f==1){ a[m][n]=1; break;}
if(n==N-1&&f==0)
{
do{
m--;
n=reback(m);
if(m==0 && n==N-1 && aa==1) break;
}while(n>=N-1);
}
}
aa=1;
m++;
if(m>=N)m=0;
}while(m<N &&n<N);
printf("\n\n********IT'S OVER!!********");
fprintf(fp,"\n\n**********IT'S OVER!!*******");
close(fp);
getch();
}

int check(int x1,int y1)
{int a1,b1;
for(a1=0;a1<x1;a1++){
for(b1=0;b1<N;b1++){
if(a[a1][b1]==1){
if(a1==x1||b1==y1) return(0);
if((a1-b1)==(x1-y1)) return(0);
if((a1+b1)==(x1+y1))return(0);
}
}
}

return(1);
}

int reback(int w)
{
int x;
for(x=0;x<N;x++)
if(a[w][x]==1)
{
a[w][x]=0;
return(x);
}
}

int prt()
{int t,y;

clrscr();

printf("\n************ %d **************\n\n",yp);
fprintf(fp,"\n************ %d **************\n\n",yp);
yp++;
for(t=0;t<N;t++){
for(y=0;y<N;y++){
printf("%3d",a[t][y]);
fprintf(fp,"%3d",a[t][y]);
}
printf("\n");
fprintf(fp,"\n");

}

getch();

return(0);
}

靠,太长了