2011-08-25 33 views
15

Tôi đang tìm một thực thi Java chung của thuật toán Dijkstra. Tôi đã cố gắng mã hóa điều này một mình, nhưng tôi tiếp tục gặp vấn đề. Nếu nó giúp, tôi biết thực tế là đồ thị luôn được kết nối. Có ai biết về việc thực hiện như vậy không?Tôi có thể lấy Java thực thi thuật toán Dijkstra ở đâu?

Cảm ơn!

Trả lời

14

Điều này hoàn toàn không biết xấu hổ, nhưng tôi đã mã hóa việc triển khai thuật toán Dijkstra bằng cách sử dụng Fibonacci heaps trong khi quay lại và đăng nó lên trang web cá nhân của tôi. Bạn có thể tìm mã ở đây:

Tôi đã cố gắng để bình luận mã để chỉ ra cách thức hoạt động thuật toán, những gì giả định nó làm, vv, do đó hy vọng nó dễ đọc và dễ hiểu. Hãy cho tôi biết nếu có bất cứ điều gì về nó, tôi có thể làm rõ cho bạn.

Hy vọng điều này sẽ hữu ích!

+0

i cần thiết cho đơn giản directionless đồ thị được kết nối s :) – MozenRath

+1

@ Piyush- Bạn có thể biểu diễn một đồ thị vô hướng sử dụng đồ thị có hướng - chỉ cần mỗi cặp nút được kết nối trỏ đến nhau. – templatetypedef

+0

@templatetypedef Theo tôi mã của bạn là mã sạch nhất tôi đã thấy trên mạng cho dijkstra, bạn cũng có thể chia sẻ liên kết cho DirectedGraph mà bạn vượt qua như một đối số? – JavaDeveloper

1

gì bạn có nghĩa này:

(thi JAVA có thể được tìm thấy tại liên kết đề cập (xem dưới cùng của câu trả lời này)

// initialize d to infinity, π and Q to empty 
d = (∞) 
π =() 
S = Q =() 

add s to Q 
d(s) = 0 

while Q is not empty 
{ 
    u = extract-minimum(Q) 
    add u to S 
    relax-neighbors(u) 
} 

relax-neighbors(u) 
{ 
    for each vertex v adjacent to u, v not in S 
    { 
      if d(v) > d(u) + [u,v] // a shorter distance exists 
      { 
       d(v) = d(u) + [u,v] 
       π(v) = u 
       add v to Q 
      } 
    } 
} 

extract-minimum(Q) 
{ 
    find the smallest (as defined by d) vertex in Q 
    remove it from Q and return it 
} 

chỉnh sửa: nhận này từ http://renaud.waldura.com/doc/java/dijkstra/

+7

Đó không phải là biên dịch trong phiên bản java của tôi. Phiên bản nào bạn đang sử dụng? – Patrick87

+1

Tôi nghĩ rằng OP là đặc biệt tìm kiếm mã Java chứ không phải mã giả; câu hỏi cho thấy OP đã tìm thấy mã giả nhưng gặp khó khăn khi dịch nó sang Java. – templatetypedef

+0

việc triển khai Java có thể được tìm thấy tại liên kết :) –

8

JGrapht là một thư viện Java phổ biến cho các đồ thị, thuật toán của dijkstra cũng được thực hiện quá

Các vấn đề liên quan