コード例 #1
0
        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);
        }
コード例 #2
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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public Astar()
 {
     matrisDegerler = new int[9];
     parent         = null;
 }