讨论 / 练基础的题。。。
corn 2010-11-02 06:30:00
点我顶贴 收藏 删除
数据有点弱,用朴素的dfs就可以过叻~~

Program t589;

Var n,ans:longint;

l,lx,rx,a:array [1..30] of integer;

Procedure print;

Var i:integer;

Begin

For i:=1 to n-1 do Write(a[i],' ');

Writeln(a[n]);

end;

Procedure search(k:integer);

Var i:integer;

Begin

if k>n then begin

inc(ans); if ans<=3 then print; exit;

end;

For i:=1 to n do

if (l[i]=0)and(lx[k-i+n]=0)and(rx[k+i-1]=0) then begin

l[i]:=1; lx[k-i+n]:=1; rx[k+i-1]:=1; a[k]:=i;

search(k+1); l[i]:=0; lx[k-i+n]:=0; rx[k+i-1]:=0;

end;

end;

Begin

readln(n); search(1); writeln(ans);

end.

#1 flyfire2002@2010-11-02 06:19:00
回复 删除
这也就是N皇后+输出路径而已,的确是练基础。在教材里面N皇后都是回溯的基础问题
#2 407137009@2010-11-02 06:30:00
回复 删除
数据不好,n=13的时候朴素要两秒钟才能出解,不优化就超了....
查看更多回复
提交回复