廣度優先和深度優先的總結和實踐

2021-08-11 18:20:57 字數 2575 閱讀 9844

我們先將這個地圖模型化,牆用#表示,這裡有兩種牆,一種是可以被炸彈炸掉的,另外一種是不可能被炸掉的。但是由於現在只有一枚炸彈,所以都用#表示,炸彈是不能穿牆的。敵人用g表示,空地用 . 表示,當然炸彈只能放在空地上。

測試資料:

13 13

#############

#gg.ggg#ggg.#

###.#g#g#g#g#

#…….#..g#

#g#.###.#g#g#

#gg.ggg.#.gg#

#g#.#g#.#.#.#

##g…g…..#

#g#.#g###.#g#

#…g#ggg.gg#

#g#.#g#g#.#g#

#gg.ggg#g.gg#

#############

此題可以用深度優先也可以用廣度優先

下面時深度優先的**:

#include

using namespace std;

int book[50][50] = ;

int next[4][2] = ,,,};

char a[50][50];

int n,m;//n為行 m為列

int x,y,startx,starty,tx,ty,maxx=-1,sign=1;

int getnum(int x,int y)

i++;

} i=x;

j=y;

//向右統計可以消滅敵人的人數

while(a[i][j] != '#')

j++;

}i=x;

j=y;

//向左統計可以消滅敵人的個數

while(a[i][j] != '#')

j--;

}i=x;

j=y;

//向上統計可以消滅敵人的個數

while(a[i][j] != '#')

i--;

}return

sum;

} void dfs(int x,int y)

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

tx = x+next[i][0];

ty = y+next[i][1];//右、左、下、上

//判斷是否圍牆或者已經走過

if(book[tx][ty] == 0 && a[tx][ty] == '.')

} cout

} }

dfs(startx,starty);

cout<

<1

<

<1

<

0;}

廣度優先的**:

#include

using namespace std;

int book[50][50]=;

char a[50][50];//用來儲存地圖

int next[4][2] = ,,,};

struct node;

int n,m;//n表示行 m表示列

struct node que[2501];

int x,y,tx,ty,flag,sign=1,head=1,tail=1,startx,starty,maxx=-1;

int getnum(int x,int y)

i++;

} i=x;

j=y;

//向右統計可以消滅敵人的人數

while(a[i][j] != '#')

j++;

}i=x;

j=y;

//向左統計可以消滅敵人的個數

while(a[i][j] != '#')

j--;

}i=x;

j=y;

//向上統計可以消滅敵人的個數

while(a[i][j] != '#')

i--;

}return

sum;

} int main()

} }

//把起始點放到佇列中,標記為已經走過的路徑

que[head].x = startx;

que[head].y = starty;

book[startx][starty] = 1;

tail++;

//當佇列不為空是進行迴圈

while(head//列舉四個方向

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

//判斷是否為平地或者曾經走過的路

if(book[tx][ty] == 0 && a[tx][ty] == '.')

tail++;

} }

head++;//注意這地方千萬不要忘記,當乙個點擴充套件結束後,必須要head++才能對後面的點進行擴充套件

} cout<

<1

<

<1

<

0;}

深度優先和廣度優先

在爬蟲系統中,待抓取url佇列是很重要的一部分,待抓取url佇列中的url以什麼樣的順序排隊列也是乙個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面是常用的兩種策略 深度優先 廣度優先 注 scrapy預設採用的是深度優先演算法 這裡是深...

深度和廣度優先

深度優先演算法dfs depth first search 廣度優先演算法bfs breadth first search 又叫做層次遍歷,自上向下,自左向右逐層訪問結點,訪問完一層再訪問下一層,直到無結點。深度優先搜素演算法 不全部保留結點,占用空間少 有回溯操作 即有入棧 出棧操作 執行速度慢。...

深度優先和廣度優先區別

一 深度優先搜尋的特點是 1.深度優先搜尋法有遞迴以及非遞迴兩種設計方法。一般的,當搜尋深度較小 問題遞迴方式比較明顯時,用遞迴方法設計好,它可以使得程式結構更簡捷易懂。當資料量較大時,由於系統堆疊容量的限制,遞迴容易產生溢位,用非遞迴方法設計比較好。2.深度優先搜尋方法有廣義和狹義兩種理解。廣義的...