N皇后問題 (回溯 打表)

2021-06-11 13:37:09 字數 892 閱讀 8751

第一種方法,需打表,否則超時

#pragma warning (disable:4786)  

#includeusing namespace std;

int used_column[12]; //標記列是否被用過

int used_ldia[102],used_rdia[102]; //標記對角線是否被用過

int n,cc,result;

//返回該元素所在左對角線最左上角的元素座標

int getlindex ( int row, int column )

else

}//返回該元素所在右對角線最右上角的元素座標

int getrindex( int row, int column )

else

}//深搜

void dfs( int row )

//恢復狀態

cc --;

} }}

int main()

while( scanf( "%d", &n ) && n )

return 0;

}

第二種方法,噹噹噹噹~~華麗麗的 cheat,當超時時,執行**,得出結果,然後用以下方法...

#pragma warning (disable:4786)  

#includeusing namespace std;

int main();

int n;

while( scanf( "%d", &n ) && n )

return 0;

}

HDU2553 N皇后問題 回溯 打表

回溯法解n皇后問題相對較容易。對於棋盤,用一維陣列儲存即可。i代表第i行,可以保證一定不會在同一行了,a i 表示列數。其中不會相互攻擊的條件是 不能在同一列,即a i a j 不能在一條斜線上,即行數相減的絕對值不能等於列數相減的絕對值。打表 include includeusing namesp...

回溯 n皇后問題

思想 用回溯方法求解,首先要分析問題的求解空間。可用一棵n叉樹表示這個問題的求解空間,在回溯遍歷這個課二叉樹的過程中形成合理的解。對於這棵n叉樹,列序號i 0 n 1 是它的孩子,而每個孩子都有深度為n的子樹 包括自身 這些子樹的層次是n個皇后 也代表每個皇后的行序號,因為不同的皇后肯定不在同一行 ...

n皇后問題(回溯)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...