八皇后问题是一个经典的问题。从解问题中产生出很多种经典的算法。下面是递归算法: const N=8; type queentype=array[1..N] of integer; var x,y:queentype; sum: longint; function place(k: integer):boolean; var i: integer; begin for i:=1 to k-1 do if (k-i=abs(x[k]-x[i])) or (x[k]=x[i]) then begin place:=false; exit; end; place:=true; end; procedure PrintChessboard; var i,j:integer; begin writeln('No. ',sum, ' :'); for i:=1 to N do begin for j:=1 to N do if j=x[i] then write('Q':2) else write('.':2); writeln; end; readln; end; procedure backtrack(k: integer); var i: integer; begin if k>N then begin sum:=sum+1; PrintChessboard; exit; end; for i:=1 to N do begin x[k]:=i; if place(k) then backtrack(k+1); end; end; BEGIN sum:=0; backtrack(1); writeln('Sum = ',sum); END.

评论