在一個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時,程序在我的機器上跑了很長時間。因此,可能需要更好的方法去解決這個問題。