【基礎演算法】回溯法與八皇后問題
#include"iostream" #include"stdlib.h" using namespace std; int x[8],tot=0; bool B(int x[],int k) { int i; for(i=0;i<k;i++) if(x[i]==x[k]||(abs(x[i]-x[k])==abs(i-k))) return 0; return 1; } int queen(int i) { if(i>=8) { tot++; for(i=0;i<8;i++) cout<<x[i]<<" "; cout<<endl; return 0; } for(int k=0;k<8;k++) { x[i]=k; if(B(x,i)) queen(i+1); } } int main() { queen(0);cout<<tot<<endl; return 0; }
相關推薦
【基礎演算法】回溯法與八皇后問題
#include"iostream" #include"stdlib.h" using namespace std; int x[8],tot=0; bool B(int x[],int k) { int i; for(i=0;i<k;i++) if(x[i]==x[
【資料結構與演算法】回溯法解決N皇后問題,java程式碼實現
N皇后問題 問題描述 在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法,這稱為八皇后問題。 延伸一下,便為N皇后問題。 核心思想 解決N皇后問題有兩個關鍵點。一是如何進行放置棋子,二是如何驗證棋子是否符合
【演算法分析】回溯法解八皇后問題(n皇后問題)
回溯法解題思路: (1)針對所給問題,定義問題的解空間; (2)確定易於搜尋的解空間結構; (3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。 八皇后問題:
【資料結構與演算法】回溯法解決裝載問題
回溯法解決裝載問題(約束函式優化) 解題思想 遍歷各元素,若cw+w[t]<=c(即船可以裝下),則進入左子樹,w[t]標記為1,再進行遞迴,若cw+r>bestw(即當前節點的右子樹包含最優解的可能),則進入右子樹,否則,則不遍歷右子樹。 完整程式碼實現如下 p
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題3:13 機器人的運動範圍
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 13 機器人的運動範圍 題目描述 地上有一個m行和n列的方格。一個機器人 從座標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是 不能進入行座標和列座
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題4:Generate Parentheses
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Generate Parentheses Given n pairs of parentheses, wr
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題2:12 矩陣中的字串查詢(79. Word Search 系列)
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 12 矩陣中的字串查詢(79. Word Search 系列) Word Search Given a 2D board and a word, find if
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題6:Number of Islands
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Number of Islands Given a 2d grid map of '1' s (land) and &n
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題7:Subsets(系列)
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Subsets Given a set of distinct integers,
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題5:Letter Combinations of a Phone Number
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Letter Combinations of a Phone Number Given a string containing digits from
【演算法】回溯法四步走
# 回溯法 對於回溯法,網上有很多種解釋,這裡我依照自己的(死宅)觀點做了以下三種通俗易懂的解釋: - **正經版解釋:**其實人生就像一顆充滿了分支的n叉樹,你的每一個選擇都會使你走向不同的路線,獲得不同的結局。如果能重來,我要選李白~呸!說錯了,如果能重來,我們就能回溯到以前,選擇到最美好的結局。 -
小朋友學經典演算法(14):回溯法和八皇后問題
一、回溯法 回溯法(探索與回溯法)是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 二、八皇后問題 (一)問
【基礎演算法】:線索二叉樹
重拾演算法(2)——線索二叉樹 上一篇我們實現了二叉樹的遞迴和非遞迴遍歷,併為其複用精心設計了遍歷方法Traverse(TraverseOrder order, NodeWorker<T> worker);今天就在此基礎上實現線索二叉樹。 什麼是線索
【基礎演算法】鏟雪車問題(BZOJ1190)
大雪覆蓋了整座城市,市政府要求冬季服務部儘快將一些街道(列在一份清單中)的積雪清除掉以恢復交通。整個城市由許多交叉路口和街道構成,當然任意兩個交叉路口都是直接或間接連通的。清單給出了最少的街道,使得這些街道的積雪清除後任意兩個交叉路口之間有且僅有一條通路。冬季服務部門只有一輛鏟雪車和一名司機,這輛鏟雪車的
【基礎演算法】石子合併-版本1
此題主要是用dp求出每個範圍的最小价值,再用遞迴輸出。 時間限制: 1 Sec 記憶體限制: 64 MB 題目描述 設有n堆石子排成一排,其編號為1,2,3,…,n。每堆石子有一定的數量,例如: 13 7 8 16 21 4 18 現要將n堆石子歸併為一
遞歸回溯法解決八皇后問題
一、八皇后問題 皇后是國際象棋中威力最大的棋子。她可以攻擊同一行、同一列以及與她處在斜線上的棋子。八皇后問題在1848年由國際西洋棋棋手馬克斯·貝瑟爾提出:如何在8x8格的棋盤上擺放八個皇后,使她們不能互相攻擊? 上圖是92種擺法中的其中一種。 一個有用的經驗是:在正式
回溯法求八皇后問題
本演算法將第第x行皇后的列編號記為C[x],回溯求符合條件的tot,遞迴邊界為從0到7(八皇后),皇后為逐行放置,cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]判斷皇后是否在同一對角線上話不多說,直接上程式碼: #include<s
第一次上傳程式碼 處女秀-回溯法解決八皇后問題
c語言 # include<stdio.h> # include<math.h> # define max 8 int queen[max],sum=0; int check(int n){ int i; for(i=0;i<n;i+
回溯法(八皇后問題)及C語言實現
回溯法,又被稱為“試探法”。解決問題時,每進行一步,都是抱著試試看的態度,如果發現當前選擇並不是最好的,或者這麼走下去肯定達不到目標,立刻做回退操作重新選擇。這種走不通就回退再走的方法就是回溯法。 回溯VS遞迴 很多人認為回溯和遞迴是一樣的,其實不然。在回溯
回溯法之八皇后問題
關於八皇后的介紹我就不再這裡多囉嗦了,大家可以自行百度。 現在,我來說明一下八皇后的限制條件: 1.在同一行內,皇后不能出現兩次; 2.在同一列內,皇后不能出現兩次; 3.在同一條對角線內,皇后不能出現出現兩次。 問題是:找出一個位置使得八皇后同時存放在棋盤上且互相