bcdh.net
当前位置:首页 >> N皇后问题(pAsCAl)DFS ! 重在注释!! >>

N皇后问题(pAsCAl)DFS ! 重在注释!!

{n皇后问题,递归解法,优化解法}const n=4; {n为皇后个数,在程序中为常数,编译前请调整}varb:array[1..n,1..n] of boolean;i,j:integer;sum:longint;procedure next(m:integer); {m表示列,从第一列开始找,直到第n列}vari:integer;p,q:intege...

var a:array[1..81] of integer; b:array[1..81] of boolean; n,i:integer; function check (c:integer):boolean; var i,j:integer; begin for i:=1 to 81 do for j:=i+1 to 81 do if abs(i-j)=abs(a[i]-a[j]) then begin c:=0;exit;end; c:=1;e...

program tt; var a:array [1..100] of integer; b,c,d:array [-100..200] of integer; t,i,j,k:integer; procedure print; begin t:=t+1; write(t,' '); for k:=1 to n do write(a[k],' '); writeln; end; procedure try(i:integer); var j:inte...

你的判断写错了!! function place(k,i:integer):boolean; var j:integer; begin for j:=1 to k-1 do if (x[j]=i)or(abs(x[j]-i)=abs(k-j)) then exit(false) else exit(true); //这里不能用else,不然有一个通过了判断的就会跳出 end; 应该改...

用回溯法做

八皇后是经典的回溯问题,先放代码: program ex1; var a:array[1..100]of integer; b,c,d:array[-100..100]of boolean; n,i,j,k:integer; procedure try(k:integer); var i:integer; begin if k>n then begin for j:=1 to n do write(a[j],' ')...

你用的是递归所以9或10时递归太多,系统栈不够了。将两个子程序中nq(x1,m,a,x)去掉加一个repeat until语句,化递归为循环,因为有退出条件,所以使用一个假死循环(就是看上去是死循环,其实不会出现死循环)。 type cc=array[0..11,0..11]of lo...

把i,k调个

额?答过这一问了。不介意再给20分吧 a[j]表示第j列是否被占用 b[i+j]表示从右上到左下的i+j号斜线(左上角第一条为2号,右下角第一条为16号)是否被占用 c[i-j]表示从左上到右下的i-j号斜线(右上角第一条为7号,左下角第一条为-7号)是否被占用

网站首页 | 网站地图
All rights reserved Powered by www.bcdh.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com