八皇后问题 java代码不知道什么地方错了 求大神指点

八皇后问题的数学证明及其推论的证明_百度知道
八皇后问题的数学证明及其推论的证明
<img class="word-replace" src="/api/getdecpic?picenc=0a007a*8际象棋棋盘放置8皇,第行皇已指定,让放置剩7皇,使任何2皇能相互冲突,即能同行同列同斜行.证明种放置必定行,并讨论该问题推广N*N棋盘情况.
我本身计算机,八皇问题我用C&#47;C++要120行左右程序能解决,我要数证明,更关键我提推论讨论.
提问者采纳
棋盘组合数 冯跃峰结论 包括攻击每格k等等推论
其他类似问题
var a:array [1..8] b,c,d:array [-7..16] t,i,j,k:
begin t:=t+1; write(t,&#39; &#39;); for k:=1 to 8 do write(a[k],&#39; &#39;);
procedure try(i:integer); var j: begin for j:=1 to 8 do {每皇都8种能位置} if (b[j]=0) and (c[i+j]=0) and (d[i-j]=0) then {判断位置否冲突} begin a[i]:=j; {摆放皇} b[j]:=1; {宣布占领第J行} c[i+j]:=1; {占领两角线} d[i-j]:=1; if i&8 then try(i+1) {8皇没摆完递归摆放皇}
{完任务打印结} b[j]:=0; {溯} c[i+j]:=0; d[i-j]:=0;
begin for k:=-7 to 16 do {数据初始化} begin b[k]:=0; c[k]:=0; d[k]:=0;
try(1);{第1皇始放置} end.
八皇后问题的相关知识
按默认排序
其他3条回答
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。 对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动,使教学能产生良好的效果。下面是笔者用Turbo C实现的八皇后问题的图形程序,能够演示全部的92组解。八皇后问题动态图形的实现,主要应解决以下两个问题。 (1)回溯算法的实现 (a)为解决这个问题,我们把棋盘的横坐标定为i,纵坐标定为j,i和j的取值范围是从1到8。当某个皇后占了位置(i,j)时,在这个位置的垂直方向、水平方向和斜线方向都不能再放其它皇后了。用语句实现,可定义如下三个整型数组:a[8],b[15],c[24]。其中: a[j-1]=1 第j列上无皇后 a[j-1]=0 第j列上有皇后 b[i+j-2]=1 (i,j)的对角线(左上至右下)无皇后 b[i+j-2]=0 (i,j)的对角线(左上至右下)有皇后 c[i-j+7]=1 (i,j)的对角线(右上至左下)无皇后 c[i-j+7]=0 (i,j)的对角线(右上至左下)有皇后 (b)为第i个皇后选择位置的算法如下: for(j=1;j&=8;j++) /*第i个皇后在第j行*/ if ((i,j)位置为空)) /*即相应的三个数组的对应元素值为1*/ {占用位置(i,j) /*置相应的三个数组对应的元素值为0*/ if i&8 为i+1个皇后选择合适的位置; else 输出一个解 } (2)图形存取 在Turbo C语言中,图形的存取可用如下标准函数实现: size=imagesize(x1,y1,x2,y2) ;返回存储区域所需字节数。 arrow=malloc(size);建立指定大小的动态区域位图,并设定一指针arrow。 getimage(x1,y1,x2,y2,arrow);将指定区域位图存于一缓冲区。 putimage(x,y,arrow,copy)将位图置于屏幕上以(x,y)左上角的区域。 (3)程序清单如下 #include &graphics.h& #include &stdlib.h& #include &stdio.h& #include &dos.h& char n[3]={&#39;0&#39;,&#39;0&#39;};/*用于记录第几组解*/ int a[8],b[15],c[24],i; int h[8]={127,177,227,277,327,377,427,477};/*每个皇后的行坐标*/ int l[8]={252,217,182,147,112,77,42,7}; /*每个皇后的列坐标*/ void * void try(int i) { for (j=1;j&=8;j++) if (a[j-1]+b[i+j-2]+c[i-j+7]==3) /*如果第i列第j行为空*/ {a[j-1]=0;b[i+j-2]=0;c[i-j+7]=0;/*占用第i列第j行*/ putimage(h[i-1],l[j-1],arrow,COPY_PUT);/*显示皇后图形*/ delay(500);/*延时*/ if(i&8) try(i+1); else /*输出一组解*/ {n[1]++;if (n[1]&&#39;9&#39;) {n[0]++;n[1]=&#39;0&#39;;} bar(260,300,390,340);/*显示第n组解*/ outtextxy(275,300,n); delay(3000); } a[j-1]=1;b[i+j-2]=1;c[i-j+7]=1; putimage(h[i-1],l[j-1],arrow,XOR_PUT);/*消去皇后,继续寻找下一组解*/ delay(500); }} int main(void) {int gdrive=DETECT,gmode,
initgraph(&gdrive,&gmode,&&); errorcode=graphresult(); if (errorcode!=grOk) {printf(&Graphics error&#92;n&);exit(1);} rectangle(50,5,100,40); rectangle(60,25,90,33); /* 画皇冠 */ line(60,28,90,28);line(60,25,55,15); line(55,15,68,25);line(68,25,68,10); line(68,10,75,25);line(75,25,82,10); line(82,10,82,25);line(82,25,95,15); line(95,15,90,25); size=imagesize(52,7,98,38); arrow=malloc(size); getimage(52,7,98,38,arrow); /* 把皇冠保存到缓冲区 */ clearviewport(); settextstyle(TRIPLEX_FONT, HORIZ_DIR, 4); setusercharsize(3, 1, 1, 1); setfillstyle(1,4); for (i=0;i&=7;i++) a[i]=1; for (i=0;i&=14;i++) b[i]=1; for (i=0;i&=23;i++) c[i]=1; for (i=0;i&=8;i++) line(125,i*35+5,525,i*35+5); /* 画棋盘 */ for (i=0;i&=8;i++) line(125+i*50,5,125+i*50,285); try(1); /* 调用递归函数 */ delay(3000); closegraph(); free(arrow); }
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁【求助】怎么算出八皇后问题的92种解....求大神指点一下思路_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:148,741贴子:
【求助】怎么算出八皇后问题的92种解....求大神指点一下思路收藏
或者说原理什么的谢谢各位大神
#include&iostream&bool endsign=void setqueen(int row,int col,int Q[8][8]);bool SureSafe(int row,int col,int Q[8][8]);int main(){ int queen[8][8]={0}; int i,j,m=0,n=0;
setqueen(m,n,queen);
for(i=0;i&8;i++)
for(j=0;j&8;j++)
cout&&queen[i][j]&&" ";
} cout&& return 0;}void setqueen(int row,int col,int Q[8][8]){ if(row==8)//前面8行全部设下皇后位置,标志结束. { } if(col&=8) //如果出现某一行全部没有安全位置,修改上一行皇后位置 {
again:row-=1;
for(col=0;col&8;col++)
if(Q[row][col]!=0)
Q[row][col]=0;
if(col&=8)
} } if(SureSafe(row,col,Q))//确定位置安全 {
Q[row][col]=1;
setqueen(row,col,Q); } else {
setqueen(row,col,Q); } }bool SureSafe(int row,int col,int Q[8][8]){ int tempcol, for(tempcol=0;tempcol&tempcol++)
//判断竖直方向是否有皇后(非0为皇后),有则返回false {
if(Q[row][tempcol]!=0) } for(temprow=0;temprow&temprow++) //判断水平方向是否有皇后 {
if(Q[temprow][col]!=0) } for(temprow=row,tempcol=temprow&=0&&tempcol&=0;temprow--,tempcol--)
//判断主对角线 {
if(Q[temprow][tempcol]!=0) } for(temprow=row,tempcol=temprow&=0&&tempcol&8;temprow--,tempcol++) //判断副对角线 {
if(Q[temprow][tempcol]!=0) }}
这是我自己写的程序...目前已经能成功算出1种解...
楼猪自high~再见...
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或8位bmp灰度图转化为1位二值图,代码有点问题,求大神指点
[问题点数:40分]
8位bmp灰度图转化为1位二值图,代码有点问题,求大神指点
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2012年10月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。多线程处理图像问题,求大神指点迷津!!
[问题点数:40分,结帖人holding100]
多线程处理图像问题,求大神指点迷津!!
[问题点数:40分,结帖人holding100]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。c语言作业写老好几个小时,终于写出来了,不知道错在哪里,求大神指点。_百度知道
c语言作业写老好几个小时,终于写出来了,不知道错在哪里,求大神指点。
题目:输入文本中含有一些字串对,从第一个字串中找第二个字串。找到就说“Yes”,否则就说“No”。使用 while (scanf(&%s%s&, str1, str2)==2)
结构读入两个字符串样例输入abcde a3defsgbdffgfgbn dff样例输出NoYes学校用自己编的提交系统,自动判断做错了没。我感觉我做对了。求指点。#include &stdio.h&#include &string.h&int main(int argc, char *argv[]){int i=0,p=0,s=0;char str1[100]={&&#92;0&},str2[100]={&&#92;0&};while (scanf(&%s%s&,str1,str2)==2) {
for(i=0;i&strlen(str1);i++)
if(str1[i]==str2[s])
if(p==strlen(str2))}
if(p==strlen(str2))
printf(&Yes&#92;n&);
printf(&No&#92;n&);}}
提问者采纳
有点现问题而已你输入asasd asd你的结果是NO但应该输出的是YES只要改成else
}应该就行了其实在string.h有个函数strstr例子如下 #include&stdio.h& #include&string.h&int main(){ char a[1000],b[1000]; while(scanf(&%s%s&,a,b)!=EOF) {
if(strstr(a,b))
printf(&YES&#92;n&);
printf(&NO&#92;n&); }}
加入i--;不对啊,我改成if(p&strlen(str2)-2)i--; 感觉输出结果是对的,但还是错的,求大神指点,又哪里错了,各种输入能想到的都试了。strstr函数没学过不太会,我们还没学指针,函数。
strstr是string里包含的函数其实我也没学多久。。。。只会点基础的你是网上提交是不是...?你最后面有个这样只能测试一组数据可能是这个问题你去掉试试
提问者评价
其他类似问题
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 八皇后问题代码 的文章

 

随机推荐