在一個8*8的棋盤上,擺放八個皇後,要求同一行內不能有兩個皇後,同一列不能有兩個皇後,同一斜線上不能有兩個皇後。
采用回溯的算法思想:即逐步探測每種可能的配置,如果滿足要求,就保存下來,如果不滿足要求,就回溯到上一步,繼續探測。直到所有情形均被探測,程序結束。
<iostream>
* dat;
conf* next;
conf( s) == =~ size;
s=);
solve();
print();
~Queen();
* confHead;
* rows;
* cols;
* left;
* right;
save();
putQueen( r, c);
delQueen( r, c);
== = = [*size-= [*size-=(i=;i<size;i++=-=(i=;i<(*size-);i++==~* (confHead!==confHead->=
* (confHead=== (i=;i<size;i++->dat[i]=->next==(temp->next!==temp->->next==temp-> (i=;i<size;i++->dat[i]=->next=
Queen::putQueen( r, (cols[c] && left[r+c] && right[size--c+==+c]=--c+r]=
Queen::delQueen( r,=-=+c]=--c+r]=
num=;
ir=,ic=;
((ic<=size-=size;
++ (rows[ir]==-)
(ir===ir-==ic+ (ir==size-)
num++=ir-==ic+
=ir+=
* temp= (temp!= (i=;i<size;i++<<<<i<<<<temp->dat[i]<<<< (i=;i<size;i++ (j=;j<size;j++ (temp->dat[i]==<<<<<<=temp->
(<<<<>> (s<<<<< num=<<<<num<<<<>>
當size為13時,程序在我的機器上跑了很長時間。因此,可能需要更好的方法去解決這個問題。