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...