色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java廣度優(yōu)先和深度優(yōu)先算法

廣度優(yōu)先和深度優(yōu)先是兩種常見的基本算法。在Java程序設(shè)計(jì)中,二者均有重要應(yīng)用。

廣度優(yōu)先算法

廣度優(yōu)先算法,也稱為“寬度優(yōu)先搜索”,是通過搜索算法遍歷查找樹或圖的一種方式,它從根節(jié)點(diǎn)開始,依次訪問每個(gè)相鄰節(jié)點(diǎn),并逐層地向下搜索。廣度優(yōu)先算法的實(shí)現(xiàn)可以采用隊(duì)列數(shù)據(jù)結(jié)構(gòu)。

/**
* 廣度優(yōu)先搜索
* @param graph 圖
* @param start 起點(diǎn)
* @param end 終點(diǎn)
*/
public void bfs(int[][] graph, int start, int end) {
Queuequeue = new LinkedList<>(); //隊(duì)列保存當(dāng)前層節(jié)點(diǎn)
boolean[] visited = new boolean[graph.length]; //記錄已訪問節(jié)點(diǎn)
queue.offer(start);
visited[start] = true;
int level = 0; //層數(shù)
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("找到終點(diǎn),距離為:" + level);
return;
}
queue.offer(j);
visited[j] = true;
}
}
}
}
System.out.println("未找到終點(diǎn)");
}

深度優(yōu)先算法

深度優(yōu)先算法,也稱為“深度優(yōu)先搜索”,是從一個(gè)子節(jié)點(diǎn)開始,不斷向下遍歷每一個(gè)分支,直到遇到?jīng)]有未被訪問的分支,此時(shí)回溯到上一個(gè)節(jié)點(diǎn),重復(fù)以上操作,直至遍歷完整個(gè)樹或圖。深度優(yōu)先算法的實(shí)現(xiàn)可以采用遞歸、棧等數(shù)據(jù)結(jié)構(gòu)。

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

在實(shí)際應(yīng)用中,廣度優(yōu)先算法通常適用于搜索最短路徑,如迷宮問題、網(wǎng)頁抓取等。而深度優(yōu)先算法通常適用于搜索全部路徑或狀態(tài),如八皇后問題、數(shù)獨(dú)問題等。