ACM 搜尋(最後總結)

2021-09-19 23:59:22 字數 2495 閱讀 9003

搜尋演算法學的差不多了,今天就整體總結一下吧,附帶兩個習題,以方便日後複習

搜尋的兩種演算法:深度搜尋,廣度搜尋

廣度搜尋的思想:

核心演算法:佇列;

基本步驟:

1、將最初狀態新增到對列

2、將佇列的前端不斷取出

3、佇列後端新增改狀態,可以轉移並且沒有被訪問過的狀態

4、最後知道找到結果或者隊列為空時結束;

深度搜尋的思想:

核心演算法:遞迴

基本步驟:

定義函式,然後利用自身一直遞迴,知道最後得出結果

def function(parameter)

深度搜尋經典習題:

迷宮 【問題描述】

給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和

終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮

中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。

輸入樣例 輸出樣例

【資料規模】

1≤n,m≤5

題目描述

輸入輸出格式

輸入格式:

【輸入】

第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點

座標fx,fy。接下來t行,每行為障礙點的座標。

輸出格式:

【輸出】

給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方

案總數。

輸入輸出樣例

輸入樣例#1:

2 2 1

1 1 2 2

1 2輸出樣例#1:

1具體**實現:

#include#include#include#define maxn 20

using namespace std;

int map[maxn][maxn];//表示迷宮地圖

bool temp[maxn][maxn];//標記是否走過

int dx[4]=;//橫座標的上下左右

int dy[4]=;//縱座標的上下左右

int m,n,total,sx,sy,fx,fy,l,r,t;//m,n:地圖的長寬,total:方案總數,sx,sy起點的橫縱座標,fx,fy:終點的橫縱座標,t:障 礙總數,l,r:障礙座標

void search(int x,int y)//x,y:現在所在的點的座標

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

if(temp[x+dx[i]][y+dy[i]]==0&&map[x+dx[i]][y+dy[i]]==1)//判斷下面要走的路是否有障礙

if(x+dx[i]>=1&&y+dy[i]>=1&&x+dx[i]<=n&&y+dy[i]<=m)//判斷是否超越迷宮邊界

}int main()

map[sx][sy]=0;

search(sx,sy);

printf("%d",total);

return 0;

}

廣度搜尋經典習題:

【題目描述】

當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。

假設你已經得到了乙個n*m的迷宮的圖紙,請你找出從起點到出口的最短路。

【輸入】

第一行是兩個整數n和m(1≤n,m≤100),表示迷宮的行數和列數。

接下來n行,每行乙個長為m的字串,表示整個迷宮的布局。字元『.』表示空地,『#』表示牆,『s』表示起點,『t』表示出口。

【輸出】

輸出從起點到出口最少需要走的步數。

【輸入樣例】

3 3s#t

.#.…

【輸出樣例】

6**實現:

#includeusing namespace std;

int mx[4]=,my[4]=;

bool a[105][105];

int n,m,sx,sy,fx,fy,nowx,nowy,nows,i,j,l;

bool flag;

struct node;

};bool inside(int x,int y)

queueq;

int main()

q.push(node(sx,sy,0));

a[sx][sy]=1;

flag=0;

while(!q.empty())

if(nowx==fx&&nowy==fy)

}if(flag)

break;

q.pop();

} node k=q.back();

cout

}

ACM搜尋題目總結

格式說明 題目名後面列出個人此題的大致難度 對菜鳥而言 poj 1069 the bermuda 難 題意 用給定三角型填充六邊形 解法 此題的思想上精華在於座標化 ps 傳說中比較bt,確實比較bt,主要很容易寫錯,我ac了,但程式沒完全對.poj 1077 eight 中等,此題不做人生不完整 ...

ACM搜尋題目總結

格式說明 題目名後面列出個人此題的大致難度 對菜鳥而言 poj 1069 the bermuda 難 題意 用給定三角型填充六邊形 解法 此題的思想上精華在於座標化 ps 傳說中比較bt,確實比較bt,主要很容易寫錯,我ac了,但程式沒完全對.poj 1077 eight 中等,此題不做人生不完整 ...

ACM搜尋演算法總結

一 回溯演算法 回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種 走不通就掉頭 思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最優解。評價 回溯演算法對空間的消耗較少,當其與分枝定界法一起使用時,對於所求解在解答樹中層較深的問題 有較好的效果。但應...