1
+
2
+ public class ShortestPath_Manager {
3
+
4
+ // 실행 메소드
5
+ public static void run (InputGraph .Graph graph , int vertices , int count ){
6
+ System .out .println ("---------------그래프 #" + count +"---------------" );
7
+ // 그래프 확인
8
+ graph .printGraph ();
9
+
10
+ // Negative Cycle 검사
11
+ // Negative Cycle 가 있다면 Bellman 없다면 dijkstra
12
+ if ( CheckNegativeCycle .isNeg (graph ,0 )) {
13
+ System .out .println ("\n Negative Cycle 존재O -> Bellman-Ford 실행" );
14
+ BellmanSP bSP = new BellmanSP (graph , vertices );
15
+ bSP .bellmanSP (0 );
16
+ System .out .println ("\n " );
17
+ }
18
+ else {
19
+ System .out .println ("\n Negative Cycle 존재X -> dijkstra 실행" );
20
+ DijkstraSP dSP = new DijkstraSP (graph ,vertices );
21
+ dSP .dijkstraSP (0 );
22
+ System .out .println ("\n " );
23
+ }
24
+
25
+ }
26
+
27
+ public static void main (String [] args ) {
28
+ // Graph 생성
29
+
30
+ // VERTICES = 10 , not exists NegativeCycle_DijkstraSP
31
+ int vertices1 = 10 ;
32
+ InputGraph .Graph graph1 = new InputGraph .Graph (vertices1 );
33
+ graph1 .addEdge (0 , 1 , 10 );
34
+ graph1 .addEdge (0 , 3 , 20 );
35
+ graph1 .addEdge (0 , 4 , 20 );
36
+ graph1 .addEdge (0 , 5 , 5 );
37
+ graph1 .addEdge (0 , 6 , 15 );
38
+ graph1 .addEdge (1 , 2 , 5 );
39
+ graph1 .addEdge (1 , 3 , 10 );
40
+ graph1 .addEdge (2 , 1 , 5 );
41
+ graph1 .addEdge (2 , 3 , 5 );
42
+ graph1 .addEdge (3 , 4 , 10 );
43
+ graph1 .addEdge (4 , 5 , 5 );
44
+ graph1 .addEdge (6 , 5 , 10 );
45
+ graph1 .addEdge (7 , 0 , 5 );
46
+ graph1 .addEdge (7 , 1 , 20 );
47
+ graph1 .addEdge (7 , 6 , 5 );
48
+ graph1 .addEdge (8 , 1 , 15 );
49
+ graph1 .addEdge (8 , 7 , 20 );
50
+ graph1 .addEdge (8 , 9 , 10 );
51
+ graph1 .addEdge (9 , 1 , 5 );
52
+ graph1 .addEdge (9 , 2 , 15 );
53
+
54
+ // VERTICES = 11 , exists NegativeCycle_BellmanSP
55
+ int vertices2 = 11 ;
56
+ InputGraph .Graph graph2 = new InputGraph .Graph (vertices2 );
57
+ graph2 .addEdge (0 , 1 , 2 );
58
+ graph2 .addEdge (0 , 2 , 1 );
59
+ graph2 .addEdge (0 , 6 , 1 );
60
+ graph2 .addEdge (1 , 2 , 4 );
61
+ graph2 .addEdge (1 , 3 , 4 );
62
+ graph2 .addEdge (1 , 10 , 1 );
63
+ graph2 .addEdge (3 , 6 , -2 );
64
+ graph2 .addEdge (3 , 5 , 4 );
65
+ graph2 .addEdge (4 , 3 , 2 );
66
+ graph2 .addEdge (4 , 9 , 3 );
67
+ graph2 .addEdge (4 , 1 , 3 );
68
+ graph2 .addEdge (5 , 7 , -2 );
69
+ graph2 .addEdge (6 , 2 , 3 );
70
+ graph2 .addEdge (6 , 5 , -3 );
71
+ graph2 .addEdge (7 , 8 , 2 );
72
+ graph2 .addEdge (8 , 5 , -2 );
73
+ graph2 .addEdge (9 , 10 , 1 );
74
+
75
+
76
+ // VERTICES = 10 , not exists NegativeCycle_DijkstraSP
77
+ int vertices3 = 10 ;
78
+ InputGraph .Graph graph3 = new InputGraph .Graph (vertices3 );
79
+ graph3 .addEdge (0 , 1 , 40 );
80
+ graph3 .addEdge (0 , 2 , 8 );
81
+ graph3 .addEdge (0 , 3 , 10 );
82
+ graph3 .addEdge (1 , 4 , 6 );
83
+ graph3 .addEdge (1 , 6 , 10 );
84
+ graph3 .addEdge (2 , 1 , 4 );
85
+ graph3 .addEdge (2 , 3 , 12 );
86
+ graph3 .addEdge (2 , 5 , 2 );
87
+ graph3 .addEdge (3 , 5 , 1 );
88
+ graph3 .addEdge (4 , 2 , 2 );
89
+ graph3 .addEdge (4 , 5 , 2 );
90
+ graph3 .addEdge (4 , 6 , 4 );
91
+ graph3 .addEdge (5 , 7 , 4 );
92
+ graph3 .addEdge (5 , 8 , 3 );
93
+ graph3 .addEdge (6 , 7 , 20 );
94
+ graph3 .addEdge (6 , 9 , 1 );
95
+ graph3 .addEdge (7 , 4 , 0 );
96
+ graph3 .addEdge (7 , 9 , 20 );
97
+ graph3 .addEdge (8 , 3 , 6 );
98
+ graph3 .addEdge (8 , 7 , 10 );
99
+ graph3 .addEdge (8 , 9 , 20 );
100
+
101
+
102
+ // VERTICES = 12 , exists NegativeCycle_BellmanSP
103
+ int vertices4 = 12 ;
104
+ InputGraph .Graph graph4 = new InputGraph .Graph (vertices4 );
105
+ graph4 .addEdge (0 , 1 , 1 );
106
+ graph4 .addEdge (0 , 5 , 3 );
107
+ graph4 .addEdge (1 , 2 , 2 );
108
+ graph4 .addEdge (2 , 4 , 1 );
109
+ graph4 .addEdge (3 , 1 , 3 );
110
+ graph4 .addEdge (3 , 2 , -3 );
111
+ graph4 .addEdge (4 , 3 , -3 );
112
+ graph4 .addEdge (5 , 8 , 2 );
113
+ graph4 .addEdge (6 , 4 , -1 );
114
+ graph4 .addEdge (7 , 9 , 3 );
115
+ graph4 .addEdge (8 , 10 , -1 );
116
+ graph4 .addEdge (9 , 11 , -2 );
117
+ graph4 .addEdge (10 , 4 , 2 );
118
+ graph4 .addEdge (10 , 5 , 4 );
119
+ graph4 .addEdge (10 , 6 , -1 );
120
+ graph4 .addEdge (10 , 7 , 1 );
121
+ graph4 .addEdge (11 , 4 , 2 );
122
+ graph4 .addEdge (11 , 7 , 1 );
123
+
124
+ // VERTICES = 10 , not exists NegativeCycle_DijkstraSP
125
+ int vertices5 = 10 ;
126
+ InputGraph .Graph graph5 = new InputGraph .Graph (vertices5 );
127
+ graph5 .addEdge (0 , 1 , 5 );
128
+ graph5 .addEdge (0 , 2 , 2 );
129
+ graph5 .addEdge (1 , 3 , 3 );
130
+ graph5 .addEdge (1 , 4 , 7 );
131
+ graph5 .addEdge (2 , 1 , 2 );
132
+ graph5 .addEdge (2 , 6 , 9 );
133
+ graph5 .addEdge (3 , 2 , 3 );
134
+ graph5 .addEdge (3 , 4 , 2 );
135
+ graph5 .addEdge (3 , 6 , 6 );
136
+ graph5 .addEdge (4 , 5 , 8 );
137
+ graph5 .addEdge (4 , 6 , 5 );
138
+ graph5 .addEdge (4 , 7 , 7 );
139
+ graph5 .addEdge (5 , 8 , 4 );
140
+ graph5 .addEdge (6 , 7 , 2 );
141
+ graph5 .addEdge (7 , 5 , 3 );
142
+ graph5 .addEdge (7 , 9 , 1 );
143
+ graph5 .addEdge (9 , 3 , 3 );
144
+
145
+
146
+
147
+
148
+ // 그래프 검사 후 Algorithm 실행
149
+ run (graph1 , vertices1 ,1 ); //1번 그래프
150
+ run (graph2 , vertices2 ,2 ); //2번 그래프
151
+ run (graph3 , vertices3 ,3 ); //3번 그래프
152
+ run (graph4 , vertices4 ,4 ); //4번 그래프
153
+ run (graph5 , vertices5 ,5 ); //5번 그래프
154
+
155
+ }
156
+
157
+ }
0 commit comments