模板 回溯法 (八皇后 素數環題解)

2021-09-20 07:29:01 字數 1019 閱讀 8467

1. 用約束函式在擴充套件結點處減去不滿足約束的子樹。

2. 用限界函式剪去得不到最優解的子樹。

偽**模板

void dfs(int t)//t記錄遞迴深度

}

void dfs(int t)

}}

//在dfs(1)以前,需要先將變數陣列x初始化為單位排列(1,2,3,……)

void dfs(int t)

}}

描述

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的n,求出有多少種合法的放置方法。

輸入

共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量

輸出

共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

樣例

輸入:8

輸出:92

輸入:5

輸出:10

#include#include#includeusing namespace std;

int pos[11];

int sum;

int n;

bool place(int k) }

}int main(void)

; for(int i=0;i<14;i++)

return false;

}void output()

else

}}int main(void)

x[1]=1;mark[1]=true;

dfs(2);

return 0;

}

回溯法 八皇后

題目大意 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且...

素數環問題 回溯法

素數環是乙個電腦程式問題,指的是將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。現在要求輸入乙個n,求n個數圍成一圈有多少種素數環,規定第乙個數字是1。include includeusing namespace std int n 0 int ...

素數環問題 回溯法

素數環是乙個電腦程式問題,指的是將從1到n這n個整數圍成乙個圓環,若其中任意2個相鄰的數字相加,結果均為素數,那麼這個環就成為素數環。現在要求輸入乙個n,求n個數圍成一圈有多少種素數環,規定第乙個數字是1。分析 準備 num紀錄素數環個數 將結果放入快取陣列a,a i 代表第i個資料 設定visit...