[演算法之回溯演算法]
前言:
本篇部落格來總結一下回溯演算法,作為演算法的積累:
核心:
演算法定義:
回溯法是一種優先搜尋法,按照選優條件深度優先搜尋,以達到目標.當搜尋到某一步時,發現原先選擇並不是最優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術稱為回溯法.
演算法思想:
回溯法是從初始狀態出發,按照深度優先搜尋的方式,根據產生子結點的條件約束,搜尋問題的解.當發現當前結點不滿足求解條件時,就回溯,嘗試其他的路徑.
回溯法是一種"能進則進,進不了則換,換不了則退"的搜尋方法.
解題步驟:
定義解空間
確定解空間的組織結構
搜尋解空間
n皇后問題
C++程式碼
#include "stdafx.h" #include <iostream> #include <cmath> //求絕對值函式需要引入該標頭檔案 #define M 105 using namespace std; int n;//n表示n個皇后 float x[M]; //x[i]表示第i個皇后放置在第i行第x[i]列 int countn; //countn表示n皇后問題可行解的個數 bool Place(int t) //判斷第t個皇后能否放置在第i個位置 { bool ok=true; for(int j=1;j<t;j++) //判斷該位置的皇后是否與前面t-1個已經放置的皇后衝突 { if(x[t]==x[j]||t-j==fabs(x[t]-x[j]))//判斷列、對角線是否衝突 { ok=false; break; } } return ok; } void Backtrack(int t) { if(t>n) //如果當前位置為n,則表示已經找到了問題的一個解 { countn++; for(int i=1; i<=n;i++) //列印選擇的路徑 cout<<x[i]<<" "; cout<<endl; cout<<"----------"<<endl; } else for(int i=1;i<=n;i++) //分別判斷n個分支,特別注意i不要定義為全域性變數,否則遞迴呼叫有問題 { x[t]=i; if(Place(t)) Backtrack(t+1); //如果不衝突的話進行下一行的搜尋 } } int main() { cout<<"請輸入皇后的個數 n:"; cin>>n; countn=0; Backtrack(1); cout <<"答案的個數是:"<<countn<< endl; system("pause"); return 0; }
總結:
學習都是從基礎開始的,先學好基礎,好了,今天就總結到這裡了!
相關文章
- 常用演算法之回溯法演算法
- 經典演算法之回溯法演算法
- 演算法-回溯演算法演算法
- 回溯演算法演算法
- 五大常用演算法之四:回溯演算法演算法
- 回溯演算法之復原IP地址演算法
- 五大常用演算法之四:回溯法演算法
- 「演算法之美系列」遞迴與回溯(JS版)演算法遞迴JS
- C++搜尋與回溯演算法之LETTERS(字母)C++演算法
- 【大爽python演算法】遞迴演算法進化之回溯演算法(backtracking)Python演算法遞迴
- 刷題總結——回溯演算法演算法
- 回溯演算法介紹以及模板演算法
- 回溯演算法求解橋本分數式演算法
- ”回溯演算法“框架及練習題演算法框架
- Day 22 回溯演算法 part01演算法
- 【LeetCode回溯演算法#08】遞增子序列,鞏固回溯演算法中的去重問題LeetCode演算法
- 【演算法框架套路】回溯演算法(暴力窮舉的藝術)演算法框架
- C++搜尋與回溯演算法之Lake Counting(數湖)C++演算法
- 從八皇后問題到回溯演算法演算法
- 質數填表問題的回溯演算法演算法
- 程式碼隨想錄演算法-回溯4演算法
- 程式碼隨想錄演算法 - 回溯3演算法
- Day25 第七章 回溯演算法part04 回溯終章演算法
- LeetCode演算法訓練-回溯總結LeetCode演算法
- 【經典演算法問題】馬的遍歷【回溯】演算法
- 國際象棋“皇后”問題的回溯演算法演算法
- 第七章 回溯演算法part01演算法
- 第七章 回溯演算法part03演算法
- 資料結構和演算法——遞迴-八皇后問題(回溯演算法)資料結構演算法遞迴
- 「leetcode」78. 子集【回溯演算法】詳解!LeetCode演算法
- 求自然數的組合數的回溯演算法演算法
- 說說你對貪心演算法、回溯演算法的理解?應用場景?演算法
- 演算法設計與分析中的幾個核心演算法策略:動態規劃、貪心演算法、回溯演算法和分治演算法演算法動態規劃
- 每日一題之拉低通過率 回溯演算法 leetcode 51 N皇后每日一題演算法LeetCode
- 《演算法》系列—大白話聊分治、回溯,手撕八皇后演算法
- Java資料結構與演算法--遞迴和回溯Java資料結構演算法遞迴
- c++迷宮問題回溯法遞迴演算法C++遞迴演算法
- 【LeetCode回溯演算法#07】子集問題I+II,鞏固解題模板並詳解回溯演算法中的去重問題LeetCode演算法