Skip to content

Commit 18e5dc4

Browse files
authored
feat: menambhkan materi graf pada java (#100)
Signed-off-by: slowy07 <[email protected]>
1 parent 68e455d commit 18e5dc4

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed

Diff for: algorithm/data-structure/Graph/ContohGraph.java

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import java.util.*;
2+
3+
class Edge {
4+
// kelas untuk menyimpan tei dari graf berbobot
5+
int src, dest, weight;
6+
Edge(int src, int dest, int weight) {
7+
this.src = src;
8+
this.dest = dest;
9+
this.weight = weight;
10+
}
11+
12+
}
13+
14+
class Graph {
15+
// kelas graph
16+
// simpul dari daftar kedekatan
17+
static class Node {
18+
int value, weight;
19+
Node(int value, int weight) {
20+
this.value = value;
21+
this.weight = weight;
22+
}
23+
};
24+
25+
// tentukan daftar kedekatan
26+
List<List<Node>> adj_list = new ArrayList<>();
27+
28+
// konstruktor dari graph
29+
public Graph(List<Edge> edges) {
30+
// aloksi memori daftar kedekatan
31+
for (int i = 0; i < edges.size(); i++)
32+
adj_list.add(i, new ArrayList<>());
33+
34+
// tambahkan tepi ke graf
35+
for (Edge e : edges) {
36+
// alokasikan simpul baru ke dalam daftar kedekatan
37+
// dari sumber ke tujuan
38+
adj_list.get(e.src).add(new Node(e.dest, e.weight));
39+
}
40+
}
41+
42+
// cetak daftar ketentanggaan untuk grafik
43+
public static void printGraph(Graph graph) {
44+
int src_vertex = 0;
45+
int list_size = graph.adj_list.size();
46+
47+
System.out.println("konten dari graph");
48+
while (src_vertex < list_size) {
49+
// melintasi daftar kedekata dan mencetak tepinya
50+
for (Node edge : graph.adj_list.get(src_vertex)) {
51+
System.out.println("vertex" + src_vertex + "==> " + edge.value + " (" + edge.weight + ")\t");
52+
}
53+
System.out.println();
54+
src_vertex++;
55+
}
56+
}
57+
}
58+
59+
public class ContohGraph {
60+
public static void main(String[] args) {
61+
List<Edge> edges = Arrays.asList(new Edge(0, 1, 2), new Edge(0, 2, 4),
62+
new Edge(1, 2, 4), new Edge(2, 0, 5), new Edge(2, 1, 4),
63+
new Edge(3, 2, 3), new Edge(4, 5, 1), new Edge(5, 4, 3));
64+
65+
// panggil kelas konstruktor graf untuk membuat graf
66+
Graph graph = new Graph(edges);
67+
68+
// cetak grafik sebagai daftar kedekatan
69+
Graph.printGraph(graph);
70+
}
71+
}

Diff for: algorithm/data-structure/Graph/README.md

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# graph
2+
3+
struktur grafik terutama mewakuli jaringan yang menghubungkna berbagai titik. titik-titik ini disebut sebgai simbul dn tautan yang menghubungkan simpul-simpul ini disebut '_tepian_'.jadi graf didefinisikan sebagai himpunan simpul V dan rusuk E yang menghubungkan simpul-simpul tersebut.
4+
5+
grafik sebagaina besar digunakan unutk mewakili berbagai jaringan seperti jaringan komputer, jaringan sosial, dll. grafik juga dapat digunakan untuk mewakili berbagai dependensi dalam perangkat lunak atau arsitektur. grafik ketergantungan ini sangat berguna dalam menganalisis perangkat lunak dan juga terkadang mendebugnya.
6+
7+
## berbagai varian graf
8+
9+
## 1 directed graf
10+
11+
graf berarah atau digraf adalah struktur data graf yang sisi-sisinya mempunya arah tertentu. mereka berasal dari satu simpul dan berujung ke simpul lain
12+
13+
```
14+
a -> b -> c
15+
| |
16+
| |
17+
e <------- D
18+
```
19+
20+
pada diagram diatas terdapat sisi dari titik A ke titik B. namun perlu diperhatikan bahwa a ke b tidak sama dengan b ke a seperti pada graf tak beraarah kecuali ada sisi yang ditentukan dari b ke a
21+
22+
graf beraarah jika terdapat paling sedikit satu lintasan yang simpul pertama dan terakhirnya sama. pada diagram diatas. jalur A -> b -> c -> D -> E -> A membentuk siklus berarah.
23+
24+
## weighted graf
25+
26+
dalam graf berbobot, bobot dikaitkan dengan setiap sisi graf. bobot biasanya menunjukkan jarak antara dua simpul.
27+
28+
29+
## membuat graf
30+
31+
java tidak menyediakan implementasi penuh dari struktur data graf, namun kita dapat merepresentasikan graf secara terprogram menggunakan ``collections`` dalam java. kita juga dapat mengimplementasikan grafik menggunakan array dinamis seperti vektor.
32+
33+
cara paling umum untuk membuat grafik adalah dengan menggunakan salah satu representasi grafik seperti matriks ketetanggaan atau daftar ketetanggaan.
34+
35+
## matriks kedekatan
36+
37+
matriks kedekatan adalah representasi liniear dari grafik. matriks ini menyimpan pemetaan simpul dan tepi dari graf. dalam matriks ketetanggaan, simpul dari grafik mewwaikili baris dan kolom. Artinya jika graf memiliki ``N`` simpul, maka matriks ketetanggaan akan memiliki ukuran ``NxN``
38+
39+
jika ``V`` adalah himpunan simpul dari graf tersebut maka perpoitingan ``Mij`` pada list kedekatan = 1 berarti terdapat sisi antara sipul i dan j
40+
41+
![u_graf](assets/u_graf.png)
42+
43+
seperti yang terlihat dari diagram diatas, kita melihat bahwa untuk titik ``A``, persimpangan ``AB`` dan ``AE`` diature ke ``1`` karena ada tepi dari ``A`` ke ``B`` dan ``A`` ke ``E``. demikian pula persimpangan ``BA`` diatur ke 1, karena ini adalah tidak berarah grafik ``AB = BA``. demikian pula, kita telah menetapkan semua persimpangan lain yang memiliki tepi ke ``1``.
44+
45+
contoh source dari implementasi graf pada java bisa dilihat [disini](ContohGraph.java)

Diff for: algorithm/data-structure/Graph/assets/u_graf.png

5.44 KB
Loading

0 commit comments

Comments
 (0)