日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两点之间的连线java_java计算图两点之间的路径实例代码

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两点之间的连线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计算图两点之间的路径实例代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。