//我的程序是关于8皇后的,因为我要画图形,所以注重他的位置要在我的位置上放小球表示 //它开始时的y为80,x为160 //望下依次加40 #include "stdafx.h" #include<stdlib.h> #include<stdio.h> struct name{ int x; int y; }xx[8]; int a=0; void qq(int d) { int b,c;//设置循环变量 a=d; xx[a].x=xx[a-1].x+40; if(xx[a].y==0)//如果是新的一竖列,就从xx[a]=80开始,如果是从当前行退到前一行,在是前一行的y+40 xx[a].y=80; for(b=0;b<=d-1;b++) for(c=0;c<=d-1;c++)//2层循环的目的是要准确确定着一行和前面的前面的所有不满足 { if(xx[a].y==xx[c].y) xx[a].y=xx[a].y+40;//如果同行就下移 if(abs(xx[a].x-xx[c].x)==abs(xx[a].y-xx[c].y))//如果在对角线 if(xx[a].y<360)//并且是他的y值在最大y值以内 xx[a].y=xx[a].y+40;//它的y值加40 if(xx[a].y>=360)//当加了以后大于最大值时,跳到上一竖行 { a=a-1;//跳到上一行 xx[a].y=xx[a].y+40;//他的y加40 qq(a);//递归 } } a=a+1;//如果不大于最大值时,马上跳到下一竖行 if(a<=7) qq(a); } void pp() { for(int i=1;i<=7;i++) xx[i].y=0;//每次都从开始处望下 xx[0].x=160;//设置第1个的位置 xx[0].y=80; a++; qq(a); } main()
{ pp(); for(int i=0;i<=7;i++) { printf("%d,%d\n",xx[i].x,xx[i].y); }//打印他的值 }