欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java廣度優先和深度優先算法

呂致盈1年前7瀏覽0評論

廣度優先和深度優先是兩種常見的基本算法。在Java程序設計中,二者均有重要應用。

廣度優先算法

廣度優先算法,也稱為“寬度優先搜索”,是通過搜索算法遍歷查找樹或圖的一種方式,它從根節點開始,依次訪問每個相鄰節點,并逐層地向下搜索。廣度優先算法的實現可以采用隊列數據結構。

/**
* 廣度優先搜索
* @param graph 圖
* @param start 起點
* @param end 終點
*/
public void bfs(int[][] graph, int start, int end) {
Queuequeue = new LinkedList<>(); //隊列保存當前層節點
boolean[] visited = new boolean[graph.length]; //記錄已訪問節點
queue.offer(start);
visited[start] = true;
int level = 0; //層數
while (!queue.isEmpty()) {
int size = queue.size();
level++;
for (int i = 0; i< size; i++) {
int curr = queue.poll();
for (int j = 0; j< graph.length; j++) {
if (graph[curr][j] != 0 && !visited[j]) {
if (j == end) {
System.out.println("找到終點,距離為:" + level);
return;
}
queue.offer(j);
visited[j] = true;
}
}
}
}
System.out.println("未找到終點");
}

深度優先算法

深度優先算法,也稱為“深度優先搜索”,是從一個子節點開始,不斷向下遍歷每一個分支,直到遇到沒有未被訪問的分支,此時回溯到上一個節點,重復以上操作,直至遍歷完整個樹或圖。深度優先算法的實現可以采用遞歸、棧等數據結構。

/**
* 深度優先搜索
* @param graph 圖
* @param start 起點
* @param end 終點
*/
public void dfs(int[][] graph, int start, int end) {
boolean[] visited = new boolean[graph.length]; //記錄已訪問節點
dfsHelper(graph, start, end, visited, 0);
}
/**
* 深度優先搜索的輔助方法
*/
private void dfsHelper(int[][] graph, int curr, int end, boolean[] visited, int depth) {
visited[curr] = true;
if (curr == end) {
System.out.println("找到終點,距離為:" + depth);
return;
}
for (int i = 0; i< graph.length; i++) {
if (graph[curr][i] != 0 && !visited[i]) {
dfsHelper(graph, i, end, visited, depth + 1);
}
}
}

在實際應用中,廣度優先算法通常適用于搜索最短路徑,如迷宮問題、網頁抓取等。而深度優先算法通常適用于搜索全部路徑或狀態,如八皇后問題、數獨問題等。