三九宝宝网宝宝教育学龄段教育

Pascal汉诺塔八皇后问题算法及详细讲解

02月27日 编辑 39baobao.com

[完型填空做法讲解及练习分析]完型填空1.首先要以很快的速度浏览全文,掌握文章的主旨,不要急于看选项。浏览全文时要重点了解文中所叙述的人物、时间、地点、事件,即who,when,where,what。完形命题的原则一般...+阅读

梵塔问题 如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子 从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上 不能出现大盘压小盘.找出移动次数最小的方案. 程序如下: program fanta; var n:integer; procedure move(n,a,b,c:integer); begin if n=1 then writeln(a,'--->',c) else begin move(n-1,a,c,b); writeln(a,'--->',c); move(n-1,b,a,c); end; end; begin write('EnterEnter total=',s); end; procedure try(i:integer); var j:integer; begin for j:=1 to n do begin if c[j] and l[i-j] and r[i+j] then begin a[i]:=j;c[j]:=false;l[i-j]:=false; r[i+j]:=false; if i

八皇后问题

关于i+j,i-j的问题,你可以画个网格图出来观察一下,看看上面某一个斜线上的点的坐标的和或差服从什么规律。容易得到:任意左上到右下的斜线上的点横纵坐标之差是定值;任意右上到左下的斜线上的店横纵坐标之和是定值。书上提到这一点的原因在于要用数组b和c判重,这个又与八皇后问题的定义有关——某一个皇后占领某个位置后,她所在行、两条斜线上都不能再安放皇后。程序通过对布尔类型数组b赋值来记录某一右上到左下斜线上是否已经安放皇后;通过对布尔类型数组c赋值来记录某一左上到右下斜线上是否已经安放皇后。这样可以用单位时间查询某一斜线上是否安放皇后。简单的说,这就是hash判重。学信息学竞赛的吗?八皇后问题是我当时学信息竞赛的时候学的。

个人认为,有时候画画图能够帮助理解的。...

PASCAL八皇后问题

这个正确,是n皇后问题,改改n就可以了program hh;const n=8;var i,j,k:integer; x:array[1..n] of integer;function place(k:integer):boolean; var i:integer; begin place:=true; for i:=1 to k-1 do if (x[i]=x[k]) or (abs(x[i]-x[k])=abs(i-k)) then place:=false ; end;procedure print;var i:integer; begin for i:=1 to n do write(x[i]:4); writeln; end;begin k:=1;x[k]:=0; while k>0 do begin x[k]:=x[k]+1; while (x[k]n then k:=k-1 else if k=n then print else begin k:=k+1;x[k]:=0 end end ;end.

汇编的八皇后问题

程序功能:用深度优先搜索法解决八皇后问题并打印结果.;列数行数分别用1-8标记.所以八皇后的位置申请了9个;调试感慨:汇编调试实在麻烦,不像C中在任何地方加个printf就可以知道;哪错了.跳来跳去的,不知哪里死循环了,实在不好调试..model small,stdcall;由于皇后位置都是一位数,所以加上30H后作字符打印出. printResult macro local again,print,first push si ;不能改变它的值. mov ah,02h ;输出状态不变. mov cx,2 ;对称的结果,所以打两个结果.again: mov si,1 print: mov dl,queen[si] cmp cx,2 je first mov bl,9 sub bl,dl mov dl,blfirst: add dl,30h int 21h inc si cmp si,9 ;到第9个就是说打完了. jnz print mov dl,' ' ;输出两个空格,为好看. int 21h int 21h loop again pop si endm.data ;改来改去,何必那么小气呢?用9个多方便,就一个字节,不必这么小气! queen db 9 dup(0) used db 9 dup(0) Nresult dw 0 ;结果的个数.prompt db "The positions are:",0ah,0dh,'$' over db 0ah,0dh,"The number of the result is $".code;函数功能:把存在ax寄存器里的二进制数用十进制打印出来.printaxd proc near mov bx,10000d ;二个字节的数最大就3万多. mov ch,0 ;还没出现第一个要打印的数(最高位的非0不需要打印) mov cl,5 ;最多有五位,所以一共除五次. mov si,ax ;哈哈,寄存器太聪明了.go: mov ax,si mov dx,0 ;既然是除法,就要保证高位的绝对值最小. div bx dec cl ;除一次就减一次. mov di,ax ;除完就把商移走,位置让出来给bx/10 mov si,dx ;保证余数. ;实现bx/10. mov ax,bx mov bx,10 ;记住乘除法运算不能用立即数. mov dx,0 ; 实际上dl的最大值也就是9小于10,但为了保险和习惯,还是用这一句. div bx mov bx,ax mov ax,di cmp cl,0 ;如果到最后一位了,无论是0还是不为0,都要打印了. jz next or ch,al jz gonext: mov ch,1 ;有打印的了 mov dl,al add dl,30h mov ah,02h int 21h cmp cl,0 jnz go ret ; This line cann't be forgotten.printaxd endpmain proc far mov ax,data mov ds,ax mov es,ax mov dx,offset prompt mov ah,09h int 21h mov si,1 ;当然是从第一列开始.go: inc queen[si] ;当前列向下走一步. ;测试是否走出8*8的格子了 cmp queen[si],9 jnz stay ;刚好踏出格子,就把当前列置0,把上一列所在行置空,然后继续go. mov queen[si],0 dec si ;取消所占的行. mov al,queen[si] ;不知何以不能用movzx di,queen[si] cbw mov di,ax mov used[di],0 ;是否完成搜索. cmp si,1 jnz go ;调试记语:为什么为5时不退出呢?改成4后结果居然对了.最后一个疑问了! ;对!原来如此!退出是要在queen[1]为5时,当4变成5时,这个增加的过程 ;在go的第一句,也就是说此时还为4. ;于是退出条件就是当此时第一列为4而又要向前址走一步时根据对称性 ;就要退出了. cmp queen[si],4 ;利用对称性,如果第一列算到5行,就不用算了. je exit jmp gostay: ;留在方格内,那么就剩下是否满足不在同一行同一斜行的问题了. mov al,queen[si] ;不知何以不能用movzx di,queen[si] cbw mov di,ax cmp used[di],1 ;如果为1就说明当前列的当前行已使用. je go ;循环检查是否有在同一斜行的皇后. mov di,si dec di ; bx指向与当前列比较的列.check: cmp di,0 je checkover mov dx,si ;dx装着当前列与检测列的差.,差最大不过7,所以也可以说是装在dl中. sub dx,di mov al,queen[si] ;al放两列的行之差. sub al,queen[di] cmp al,dl ;相等或相反就是在同一斜行. je go neg al ;求负数. cmp al,dl je go dec di jmp checkcheckover: ;好,现在可以留下来了. cmp si,8 jz result ;如果不是最后一列. mov al,queen[si] ;不知何以不能用movzx di,queen[si] cbw mov di,ax mov used[di],1 ;留下来这一行就占住了. inc si jmp goresult: ;好,一个结果出来了,根据对称,实际出来两个结果. add Nresult,2 printResult mov queen[si],0 dec si ;这四行初为设计上的漏洞,想了老半天. mov al,queen[si] ;不知何以不能用movzx di,queen[si] cbw mov di,ax mov used[di],0 jmp goexit: mov dx,offset over mov ah,09h int 21h mov ax,Nresult call printaxd mov ah,01h ; to pause int 21h mov ah,4ch int 21hmain endpend main 要是上面那个不行的话,你再试一试这个,用masm5调试.MODEL .286 .CODE ORG 100H QUEEN: PUSH '$' PUSH ' ' MOV BP,SP LEA DX,[BP-08] NEWL: MOV AH,'1' NEWC: MOV CL,00 MOV SI,SP ISOK: CMP SI,BP JE SAVE LODSB SUB AL,AH JZ NEXT INC CX CMP AL,CL JE NEXT ADD AL,CL JZ NEXT JMP ISOK SAVE: PUSH AX INC SP CMP SP,DX JNE NEWL MOV AH,9 INT 21H BACK: DEC SP POP AX NEXT: INC AH CMP AH,'1'+08 JNE NEWC CMP SP,BP JNE BACK INT 20H END QUEEN

以下为关联文档:

实例讲解托福综合写作要点及备考策略实例讲解托福综合写作要点及备考策略简单来说,综合写作就是对阅读和听力的归纳总结。但是这看似简单的归纳总结,对大部分同学来说却是一个不小的挑战,尤其是自认为听力不好的...

胎儿发育指标详细讲解每个月的指标第一个月1、子宫大小同妊娠前无异。2、受精卵经过约1周时间逐步移到子宫腔,“种入”子宫内膜,这称为着床。此时的宝宝被称做“胎芽”。身长和头部的比例为2∶1,有长长的尾巴,...

如何提高讲解员的讲解技巧及应变能力讲解员是沟通博物馆和社会的桥梁和纽带,是博物馆发挥宣传教育功能的重要手段。讲解服务使参观者从耳听目染中,直接获得鲜明而确实的知识。服务质量和水平直接影响着观众的受教...

皇后问题课程设计的心得体会/*八皇后皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。 如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 这个程序我看不懂.哪位朋...

初中生物试题要详细讲解1A因为A可以破坏生态平衡 2C 1、生活细胞,代谢旺盛,分生能力强,细胞体积小。2、呈等径多面体,排列紧密,无细胞间隙。3、细胞壁薄,质浓,核大,没有明显的液泡和质体。 3D 4D 5D膳食纤...

皇后成长计划1 9黑龙王妃攻略求啊一定要详细每个月都要写好黑龙王妃属性要求 魅力>700 勇气>700 智力>700 自信>600 交际>500 声望>550 武术>500 臂力>750 罪恶>400 礼仪>600 交谈怪次数>50 魔性>700 杀怪次数>50 好感度>70父亲的名...

皇后成长计划无敌版黑龙王妃攻略超详细!要是还有其他角色就好注:每个月都要去大明宫(你们是知道的)累的时候别休息,吃饭。 一直都用减肥饮食。——————————————————————下面是详细攻略———————————————...

人教版初一数学的详细讲解知识点抓住两个主要环节:一是紧紧抓住这一道题和一类题之间的共性,想想这一类题的一般思路和一般解法;二是紧紧抓住这一道题的特殊性,抓住这一道题与这一类题不同的地方。选择一个或几...

皇后成长记1 7攻略求精求详细不详细不给分南王妃(嫁给李佑):声望>600 魅力>800 交际>800 叛逆>200 自信>800 智力>600 魔性>300 气质>700 亲和>800 道德>500 礼仪>600 谈吐>600 舞蹈>500 武术>800 李佑>15②前期的同学...

推荐阅读
图文推荐