티스토리 뷰

카테고리 없음

Bellman-Ford 알고리즘 Java 코드

더블제로스톤 2016. 10. 13. 16:19

Bellman-Ford

다익스트라 알고리즘 보다 느리지만 음수가 있을 때도 사용 가능

또한 사이클 여부를 확인 할 수 있음


시간복잡도

O(VE)


Java code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class BellmanFord {
    int vertexNum;
    int edgeNum;
    HashMap<Integer, Double>[] graph; //graph[출발지] = HashMap<도착지, 가중치>
    Double[] distance;
    
    public double bellmanFord(){
        distance[0= 0.0;
        for(int i=1; i<vertexNum; i++) distance[i] = Double.MAX_VALUE;
        
        boolean update = false;
        for(int i=0; i<vertexNum; i++){
            update = false;
            for(int vi=0; vi<vertexNum; i++){
                for(int adj : graph[vi].keySet()){
                    if(distance[adj] > distance[vi] + graph[vi].get(adj)){
                        distance[adj] = distance[vi] + graph[vi].get(adj);
                        update = true;
                    }
                }
            }
            if(!update) break//완화를 전부 
        }
        if(update) return Integer.MAX_VALUE; //(VertexNum - 1)번 한 후 완화 가능하면 사이클이 존재하는 것
        return distance[edgeNum - 1];
    }
}
cs


댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함