Помогите мне, я получил Индекс был за пределами массива. это было нормально, когда количество целых чисел было 5, теперь я добавляю еще 1 точку, и это вызывает ошибки logi c, мне нужна помощь, вот мои коды
Module Module1
Sub Main()
Console.WriteLine("Algoritma BFS (Breadth First Search)")
Console.WriteLine("Contoh: Pencarian jalur yang melalui semua titik")
Console.WriteLine("Diasumsikan ada 7 titik yang harus dilalui semuanya, yaitu A,B,C,D,E,F,G")
Console.WriteLine("semua titik tidak terhubung secara langsung, melainkan hanya melalui jalur tertentu saja")
Console.WriteLine("setiap jalur juga memiliki biaya yang berbeda")
Console.WriteLine("maka tentukan jalur yang harus diambil untuk mengelilingi semua titik yang ada")
Console.WriteLine("Diasumsikan data jalur yang tersedia adalah sebagai berikut")
Console.WriteLine("Titik awal, Titik Tujuan, Biaya")
Console.WriteLine("Titik A , Titik B , 10")
Console.WriteLine("Titik A , Titik C , 5")
Console.WriteLine("Titik A , Titik D , 9")
Console.WriteLine("Titik A , Titik E , 7")
Console.WriteLine("Titik A , Titik F , 8")
Console.WriteLine("Titik A , Titik G , 12")
Console.WriteLine("Titik B , Titik C , 6")
Console.WriteLine("Titik B , Titik D , 7")
Console.WriteLine("Titik B , Titik E , 5")
Console.WriteLine("Titik B , Titik F , 6")
Console.WriteLine("Titik B , Titik G , 9")
Console.WriteLine("Titik C , Titik D , 4")
Console.WriteLine("Titik C , Titik E , 5")
Console.WriteLine("Titik C , Titik F , 8")
Console.WriteLine("Titik C , Titik G , 7")
Console.WriteLine("Titik D , Titik E , 6")
Console.WriteLine("Titik D , Titik F , 8")
Console.WriteLine("Titik D , Titik G , 7")
Console.WriteLine("Titik E , Titik F , 7")
Console.WriteLine("Titik E , Titik G , 7")
Console.WriteLine("Titik F , Titik G , 9")
Console.WriteLine("")
'Tentukan jumlah titik yang harus dihubungkan 'Diasumsikan dalam kasus ini, jumlah titik ada 6 buah
Const jumlahTitik As Integer = 6
Console.WriteLine("jumlah titik = " & jumlahTitik)
Console.WriteLine("")
'1. Lakukan inisialisasi daftar titik sebanyak jumlah titik, dan masukkan masing-masing titik ke dalam daftar
Dim daftarTitik() As Integer = New Integer(jumlahTitik - 1) {0, 1, 2, 3, 4, 5}
'2. Lakukan inisialisasi daftar jalur sesuai dengan data yang tersedia 'Terdapat matriks berukuran [jumlah titik x jumlah titik] untuk menyimpan jalur dari masing-masing titik
'Jika tidak ada jalur diantara 2 titik, maka nilai jalurnya adalah 0
Dim daftarBiaya(,) As Double = New Double(jumlahTitik - 1, jumlahTitik - 1) { _
{10, 5, 9, 7, 8, 12}, _
{0, 6, 7, 5, 6, 9}, _
{0, 0, 4, 5, 8, 7}, _
{0, 0, 0, 6, 8, 7}, _
{0, 0, 0, 0, 7, 7}, _
{0, 0, 0, 0, 0, 9} _
}
'3. Tentukan titik awal pencarian jalur
Console.WriteLine("Tentukan titik awal pencarian jalur antara 1 sampai dengan " & jumlahTitik & ": ")
Dim idxTitikAwal As Integer = Integer.Parse(Console.ReadLine) - 1
Console.WriteLine("")
'4. Lakukan perhitungan pencarian jalur melalui semua titik yang ada 'Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 4a - 4e)
Dim jalur As ArrayList = BFS(daftarTitik, daftarBiaya, idxTitikAwal)
'5. Setelah menemukan jalur, maka hitung biaya untuk jalur tersebut
Dim biaya As Double = 0
For i As Integer = 0 To jalur.Count - 2
Dim titikAwal As Integer = jalur(i)
Dim titikTujuan As Integer = jalur(i + 1)
biaya += daftarBiaya(titikAwal, titikTujuan)
Next
Console.WriteLine("Total biaya = " & biaya)
Console.ReadLine()
End Sub</p>
<code> Public Function BFS(ByVal daftartitik() As Integer, ByVal daftarBiaya(,) As Double, ByVal idxTitikAwal As Integer) As ArrayList
'4a. Masukkan titik awal sebagai titik pertama yang akan dicari jalurnya
Dim daftarInduk As New ArrayList()
daftarInduk.Add(idxTitikAwal)
'4b. Kemudian masukkan titik-titik lain secara terurut dari titik pertama ke titik terakhir
For i As Integer = 0 To daftartitik.Length - 1
If i <> idxTitikAwal Then daftarInduk.Add(i)
Next
'4c. Inisialisasi variabel depth / kedalaman untuk mengetahui kedalaman pada saat pencarian jalur
Dim depth(daftartitik.Count - 1) As Integer
Dim depthNormal(daftartitik.Count - 1) As Integer
For i As Integer = 0 To depthNormal.Length - 1
depth(i) = daftartitik.Count - i
depthNormal(i) = daftartitik.Count - 1 - i
Next
'4d. Masukkan titik pertama ke dalam jalur yang akan dihitung 'Dan hilangkan titik tersebut dari daftar titik yang sudah dihitung
Dim jalur As New ArrayList()
jalur.Add(daftarInduk(0))
daftarInduk.RemoveAt(0)
depth(jalur.Count - 1) -= 1
Console.WriteLine("Titik Awal = " & Chr(jalur(0) + 65))
'4e. Lakukan perhitungan selama masih ada titik yang belum dihitung (poin 4e1 - 4e4)
While daftarInduk.Count > 0
Dim titikSebelumnya As Integer = jalur(jalur.Count - 1)
Dim titikBerikutnya As Integer = daftarInduk(0)
'4e1. Masukkan titik berikutnya ke dalam jalur yang sedang dihitung 'Dan hilangkan titik tersebut dari daftar titik yang sudah dihitung
jalur.Add(titikBerikutnya)
daftarInduk.RemoveAt(0)
'4e2. Hitung kedalaman pada titik yang sedang dihitung 'Apabila nilai kedalaman adalah 0, maka beri nilai awal kedalaman 'Selain itu kurangkan nilai kedalamannya dengan 1
If depth(jalur.Count - 1) <= 0 Then
depth(jalur.Count - 1) = depthNormal(jalur.Count - 1)
Else
depth(jalur.Count - 1) -= 1
End If
Console.WriteLine("Memasukkan Titik " & Chr(titikBerikutnya + 65))
'4e3. Jika terdapat jalur antara titik sebelumnya dan titik berikutnya, 'Lakukan pengecekan apakah semua titik sudah dihitung semua 'Jika kondisi tersebut benar, maka hentikan perhitungan
If daftarBiaya(titikSebelumnya, titikBerikutnya) <> 0 Then
If jalur.Count = daftartitik.Count Then
Console.WriteLine("Jalur sudah ditemukan")
Console.Write("Jalur yang terbentuk = ")
For i As Integer = 0 To jalur.Count - 1
Dim titik As Integer = jalur(i)
Console.Write(IIf(i = 0, "", "-") & Chr(titik + 65))
Next
Console.WriteLine("")
End If
'4e4. Jika tidak terdapat jalur antara titik sebelumnya dan titik berikutnya,
'maka lakukan perhitungan berikut (poin 4e4a - 4e4f)
Else
Console.Write("Jalur yang terbentuk = ")
For i As Integer = 0 To jalur.Count - 1
Dim titik As Integer = jalur(i)
Console.Write(IIf(i = 0, "", "-") & Chr(titik + 65))
Next
Console.WriteLine("")
'4e4a. Tampilkan pesan kesalahan karena tidak terdapat jalur antara titik sebelumnya dan titik berikutnya
Console.WriteLine("Jalur tidak valid karena Titik " & Chr(titikSebelumnya + 65) & " dan Titik " & Chr(titikBerikutnya + 65) & " tidak memiliki jarak")
Console.WriteLine("")
'4e4b. Kurangi kedalaman pada posisi titik terhitung untuk masing- masing sisa titik yang tidak terhitung
For i As Integer = 0 To daftarInduk.Count - 1
depth(jalur.Count - 1) -= 1
Next
'4e4c. Dan untuk sisa titik tersebut, beri nilai kedalaman dengan angka 0
For i As Integer = jalur.Count To depth.Count - 1
depth(i) = 0
Next
'4e4d. Untuk semua titik dengan nilai kedalaman 0, 'Hilangkan titik-titik tersebut dari jalur yang sedang dihitung
'dan masukkan kembali titik-titik tersebut kedalam daftar titik yang sudah dihitung
While depth(jalur.Count - 1) <= 0
Dim titikTerakhir As Integer = jalur(jalur.Count - 1)
daftarInduk.Add(titikTerakhir)
jalur.Remove(titikTerakhir)
Console.WriteLine("Melepas Titik " & Chr(titikTerakhir + 65))
depth(jalur.Count - 1) -= 2
End While
Dim titikTujuan As Integer = daftarInduk(daftarInduk.Count - 1)
Dim titikTerdekat As Integer = -1
Dim idxtitikTerdekat As Integer = -1
'4e4e. Tentukan titik berikutnya dengan urutan terdekat setelah titik yang terakhir dihitung
'Yaitu titik dengan selisih indeks positif terendah
Dim minSelisihPositif As Integer = Integer.MaxValue
For i As Integer = 0 To daftarInduk.Count - 2
If daftarInduk(i) - titikTujuan > 0 AndAlso minSelisihPositif > daftarInduk(i) - titikTujuan Then
minSelisihPositif = daftarInduk(i) - titikTujuan
titikTerdekat = daftarInduk(i)
idxtitikTerdekat = i
End If
Next
'4e4f. Setelah menemukan titik terdekat, 'Urutkan semua titik yang belum dihitung selain titik terdekat 'Kemudian masukkan titik terdekat ini pada urutan pertama sebelum urutan tersebut
daftarInduk.RemoveAt(idxtitikTerdekat)
daftarInduk.Sort()
daftarInduk.Insert(0, titikTerdekat)
Console.WriteLine("")
End If
End While
Return jalur
End Function
Private Function daftarBiaya() As Double(,)
Throw New NotImplementedException
End Function
End Module
</code>