這個是題目:相當於就是輸入乙個只有01的矩陣,求其中1的塊數
思路:這道題其實也就是求連通塊的問題,只要乙個位置的上下左右中存在乙個1那就可以連通到一起,是bfs經典的題目
#include
#include
//#include
#include
#include
using namespace std;
//這裡需要建立乙個結構體 在bfs中能用到
struct nodenode;
int n,m;
//對應陣列的行和列
//bfs
//前期準備就是,需要乙個01矩陣,兩個增量陣列,乙個判斷是否訪問過的訪問陣列
int jv[
100]
[100]=
;bool flag[
1000][
1000]=
;//預設是沒有訪問過
int xx[4]
=;int yy[4]
=;//用來for迴圈的,分別對應四個位置
//需要寫乙個方法來判斷當前位置需不需要訪問
bool judge
(int x,
int y)
return true;
}//開始寫bfs,首先是需要有乙個佇列,其次便是不需要遞迴
void
bfs(
int x,
int y)}}
}int
main()
}printf
("%d\n"
,jv[0]
[0])
;int sum=0;
//用來記錄最後的值
//就是開始遍歷,從第乙個等於1的地方開始,sum++,然後深度遍歷其他地方
for(i=
0;i}printf
("%d\n"
,sum)
;return0;
}
演算法筆記之DFS與 BFS
基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...
演算法筆記 8 2 廣度優先搜尋BFS
三 相關例題 這次我們改變尋路策略,不知要找出路線,而且想知道從起點到終點的最短步數是多少 兩個相鄰節點間看作相隔一步 我們可以按如下的圖示進行寬度優先搜尋 起點a是第一層,發現從a出發能訪問到b和c,於是b c是第二層 按順序訪問第二層,先看b。從b出發能訪問到d和e,於是d e是第三層,等第二層...
BFS演算法框架
bfs演算法框架 bfs的核心思想,就是把一些問題抽象成圖,從乙個節點開始,向四周擴散。一般來說,寫bfs都是用 佇列 這個資料結構,每次將乙個節點周圍的節點加入到隊尾。先舉例 下 bfs 出現的常 場景好吧,問題的本質就是讓你在 幅 圖 中找到從起點 start 到終點 target 的最近距離,...