两点之间的连线java_java计算图两点之间的路径实例代码
java計算圖兩點之間的路徑總結
本文實例為大家分享了java計算圖兩點之間的所有路徑的具體代碼,供大家參考,具體內容如下
1.給定圖如下:
2.求0到3之間可達的所有路徑
這里問題就是關于搜索遍歷的問題,但其中需要注意到不能產生回路或環.
算法描述如下:
top_node:當前棧頂元素
adjvex_node;當前top_node已經訪問的鄰接點
next_node:即將訪問的元素(top_node的第adjvex_node個鄰接點所對應的元素)
找出所有路徑采用的是遍歷的方法,以“深度優先”算法為基礎。從源點出發,先到源點的第一個鄰接點N00,再到N00的第一個鄰接點N10,再到N10的第一個鄰接點N20...當遍歷到目標點時表明找到一條路徑。
上述代碼的核心數據結構為一個棧,主要步驟:
①源點先入棧,并進行標記
②獲取棧頂元素top_node,如果棧頂為終點時,即找到一條路徑,棧頂元素top_node出棧,此時adjvex_node=top_node,新的棧頂元素為top_node,否則執行③
③從top_node的所有鄰接點中,從adjvex_node為起點,選取下一個鄰接點next_node;如果該元素非空,則入棧,使得adjvex_node=-1,(adjvex_node=-1代表top_node的鄰接點一個還沒有訪問)做入棧標記。否則代表沒有后續節點了,此時必須出棧棧頂元素,并置adjvex_node為該棧頂元素,并做出棧標記。
④為避免回路,已入棧元素要記錄,選取新入棧頂點時應跳過已入棧的頂點,當棧為空時,遍歷完成
3.java代碼實現
1)圖結構
點表
public class Vertex {
//存放點信息
public int data;
//與該點鄰接的第一個邊節點
public Edge firstEdge;
}
邊表(代表與點相連的點的集合)
//邊節點
public class Edge {
//對應的點下表
public int vertexId;
//邊的權重
public int weight;
//下一個邊節點
public Edge next;
//getter and setter自行補充
}
2).算法實現
public class Vertex {
//存放點信息
public int data;
//與該點鄰接的第一個邊節點
public Edge firstEdge;
}
總結
以上是生活随笔為你收集整理的两点之间的连线java_java计算图两点之间的路径实例代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp mysql类_PHP封
- 下一篇: java下载pdf6_疯狂java讲义第