您的位置首页百科问答

八皇后问题

问题补充说明:(八皇后问题):设计程序完成如下要求:在8×8的国际象棋棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。 要求: (1)依次输出各种成功的放置方法。 (2)最好能画出棋盘的图形形式,并在棋盘上动态地演示试探过程。 (3)程序能方便地移植到其它规格的棋盘上。 请在两天内给我好吗,两天后我就要用了,谢谢!!!!

八皇后问题

TurboC图形演示八皇后分步过程,红色为当前挪动棋子

出现一种结果棋盘颜色变为亮白色

空格键开关分步久黑视映息片曲演示,ESC退出

黑#include<math减宜危级般纸管究余永.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>

#defineSIZE8

voiddrawb(intx,i来自nty,intcolor1,intcolor2);

360问答voiddrawqueen(intx,inty,i苏及事病挥应将ntcolor);

voidBacktrack(intt,intn,int*x);

i片掉得农希宣延方ntplace(intk,int*x);

intmain(void)

{

intGraphDriver;

intGraphMode由此口参问;

inti,j,x,y;

intqueenlist[SIZE+1];

x=70;

y=30;

GraphDriver=DETECT;

initgraph(&GraphDriver,&Gra又培phMode,"");

drawb(x,y,7,1);

getch();

Backtrack(1,SIZE,queenlist);

}

voiddrawb(intx,inty,intcolor危那攻料1,intcolor2)

{

inti,j;

cha负被队厂告首临苏注rbuffer[2]={"0"};

for(i=超0;i<SIZE;i++)

{

for(j=0;j<SIZE;j++)

{

setfillstyle(SOLID_FILL,((i%2==0&&j%2==0)||(i%2!=0&&j%2!=0))?color1:color2);

bar(x+i*49,y+j*49,x+i*49+48,y+j*49+48)个激袁议李层部;

}

}

setcolor(15);

for(i=0;i<SIZE;i++)

{

buffer[0]++;

outtextxy(x-15,y+i*49+20,buffer);

}

buffer[0]='A';

for(i=0;i<SI皇队课把让合如ZE;i++)

{

outtextxy(x+i*49+20,y+402,buffer);

buffer[0政鲁理要]++;

}

}

voiddrawque红鲁en(intx,int派肥刘y,intcolor)

{

setcolor(color);

setfillstyle(SOLID_FILL,color);

moveto(x*49+39,y*49+11);

lineto(x*49+39,y*49-11);

lineto(x*49+51,y*49-11);

lineto(x*49+51,y*49+11);

lineto(x*49+59,y*49+19);

lineto(x*49+31,y*49+19);

lineto(x*49+39,y*49+11);

floodfill(x*49+50,y*49+12,color);

}

intplace(intk,int*x)

{

intj;

for(j=1;j<k;j++)

if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))

return0;

return1;

}

voidBacktrack(intt,intn,int*x)

{

inti;

inta,b;

staticintstep=1;

if(t>n)

{

drawb(70,30,15,1);

for(i=1;i<=n;i++)

{

drawqueen(i,x[i],0);

}

a=getch();

if(a==0)

a=getch();

elseif(a==27)

{

closegraph();

exit(0);

}

elseif(a==32)

{

step=1-step;

}

}

else

for(i=1;i<=n;i++)

{

x[t]=i;

if(step==1)

{

drawb(70,30,7,1);

for(a=1;a<=t;a++)

{

drawqueen(a,x[a],(a==t)?12:0);

}

a=getch();

if(a==27)

{

closegraph();

exit(0);

}

elseif(a==32)

{

step=1-step;

}

}

if(place(t,x))

Backtrack(t+1,n,x);

}

}