通過一道面試題對於BFS,DFS的簡單思考

2021-06-18 01:45:34 字數 785 閱讀 2598

topic:面經

題目:給定乙個二維陣列,可以看做其中的1被0包圍,求陣列中有幾堆1?

code:

class test,,,

};int m = matrix.length, n = matrix[0].length;

//bfs方法:

// int dir = ,

// ,

// ,

// // };

// int res = 0;

// queueq = new linkedlist();

// for(int i=0; i=0 && r=0 && c=0 && r=0 && c

小結:這裡bfs和dfs的runtime應該都是o(4mn),如果不對請糾正,space是o(mn),乙個用了遞迴(dfs),乙個由於queue的存在是順序的,但是兩者除了便利方式外,其實原理、執行方式都非常接近。

dfs之所以使用遞迴,因為記憶體本身就是乙個stack,我們只是加以利用罷了。換句話說,如果我們像bfs那樣,手動建立乙個stack,也可以完成順序的dfs。

下面這個圖的dfs和bfs的例子是個很好的印證:

public void bfs()

} for(int i=0; is= new stack();

s.push(0);

display(0);

list[0].wasvisited = true;

while(!s.isempty())

else

s.pop();

} for(int i=0; i

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...