private void AstarSezgisel() { Astar = new Astar(); Astar.degeroku(baslangıclabel); List <Astar> Listeacik = new List <Astar>(); List <int[]> Listekapalı = new List <int[]>(); if (!TersSıraKontrol(Astar.matrisDegerler, Astar.bitismatris)) { lbl_durum.Text = "Ters sıralı eleman sayısı çift olmalı"; return; } else { lbl_durum.Text = "Liste hazır..."; } Astar.Hdeger(); Astar.Fdeger(); Listeacik.Add(Astar); Astar minimumYol; do { minimumYol = MinYol(Listeacik); Listekapalı.Add(minimumYol.matrisDegerler); ListeKuyruğu(minimumYol, Listeacik, Listekapalı); } while (minimumYol.h != 0 && Listeacik.Count > 0); // sonuç duruma ulaşana kadar // veya liste boş olana akdar sürdür SonucYaz(minimumYol, textBox_Adimlar, 0); }
private bool SonucYaz(Astar minYol, TextBox txt_problemVarmı, int v) { if (minYol == null) { return(true); } SonucYaz(minYol.parent, txt_problemVarmı, v); minYol.txtsonucumuz(txt_problemVarmı); return(false); }
private Astar CocukOlustur(Astar minYol, int bosluk, int deger) { // yeni düğüm ekle/oluştur Astar cocuk = new Astar(); Array.Copy(minYol.matrisDegerler, cocuk.matrisDegerler, minYol.matrisDegerler.Length); // başlangıçtan gelinen mesafeyi bul cocuk.g = minYol.g + 1; DegisimDegerleri(cocuk.matrisDegerler, bosluk, deger); cocuk.Hdeger(); cocuk.Fdeger(); cocuk.parent = minYol; return(cocuk); }
private void ListeKuyruğu(Astar minYol, List <Astar> Listeacik, List <int[]> Listekapalı) { // boşluk 0 olarak aldık int bosluk = Array.IndexOf(minYol.matrisDegerler, 0); if ((bosluk % 3) != 2) { // boşluğun sağda komşusu var mı? varsa; Astar cocuk = CocukOlustur(minYol, bosluk, bosluk + 1); if (!Yön(cocuk.matrisDegerler, Listekapalı)) { Listeacik.Add(cocuk); } } if ((bosluk % 3) != 0) { // boşluğun sol komşusu varsa Astar cocuk = CocukOlustur(minYol, bosluk, bosluk - 1); if (!Yön(cocuk.matrisDegerler, Listekapalı)) { Listeacik.Add(cocuk); } } if ((bosluk - 3) >= 0) { //boşluğun üst kısımda komşusu varsa Astar cocuk = CocukOlustur(minYol, bosluk, bosluk - 3); if (!Yön(cocuk.matrisDegerler, Listekapalı)) { Listeacik.Add(cocuk); } } if ((bosluk + 3) < 9) { //boşluğun alt kısmında komşusu varsa Astar cocuk = CocukOlustur(minYol, bosluk, bosluk + 3); if (!Yön(cocuk.matrisDegerler, Listekapalı)) { Listeacik.Add(cocuk); } } Listeacik.Remove(minYol); }
public Astar() { matrisDegerler = new int[9]; parent = null; }