第一種方法,需打表,否則超時
#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,表示棋盤和皇后的數量 如...