示例#1
0
        public string DFS(Kose kose)
        {
            if (!kose.ziyaretDurumu)
            {
                Visit(kose);

                foreach (Edge item in kose.Edges)
                {
                    if (item.kose2 == kose)
                    {
                        if (!item.kose1.ziyaretDurumu)
                        {
                            strDFS += item.kose1.data + "  ";
                            DFS(item.kose1);
                        }
                    }
                    else
                    {
                        if (!item.kose2.ziyaretDurumu)
                        {
                            strDFS += item.kose2.data + "  ";
                            DFS(item.kose2);
                        }
                    }
                }
            }
            return(strDFS);
        }
示例#2
0
        public string Prims(Kose kose, Edge edge)
        {
            Edge tempkenar = new Edge();

            if (kose.data == "A")
            {
                get += edge.kose1.data + "- " + edge.kose2.data + "    ";
            }
            else if (kose.data != "D")
            {
                get += edge.kose2.data + "-" + edge.kose1.data + "    ";
            }

            foreach (Edge kenar in kose.Edges)
            {
                if (!kenar.kose1.ziyaretDurumu || !kenar.kose2.ziyaretDurumu || (!kenar.kose1.ziyaretDurumu && !kenar.kose2.ziyaretDurumu))
                {
                    KenarPrim.Add(kenar);
                }
            }
            Enkucuk = int.MaxValue;
            foreach (Edge kenar in KenarPrim)
            {
                if (kenar.kose1.ziyaretDurumu && kenar.kose2.ziyaretDurumu)
                {
                    continue;
                }
                else
                {
                    if (kenar.distance <= Enkucuk)
                    {
                        tempkenar = kenar;
                        Enkucuk   = kenar.distance;
                    }
                }
            }

            if (tempkenar.kose1.ziyaretDurumu)
            {
                tempkenar.kose2.ziyaretDurumu = true;
                KenarPrim.Remove(tempkenar);
                Prims(tempkenar.kose2, tempkenar);
            }
            else if (tempkenar.kose2.ziyaretDurumu)
            {
                tempkenar.kose1.ziyaretDurumu = true;
                KenarPrim.Remove(tempkenar);
                Prims(tempkenar.kose1, tempkenar);
            }

            return(get);
        }
示例#3
0
        public void Dijkstra(Kose kose)
        {
            foreach (Edge edge in kose.Edges)
            {
                if (kose == edge.kose1)
                {
                    int yeniMaliyet = edge.distance + edge.kose1.maliyet;

                    if (!edge.kose2.ziyaretDurumu)
                    {
                        if (edge.kose2.maliyet > yeniMaliyet)
                        {
                            edge.kose2.maliyet       = yeniMaliyet;
                            edge.kose2.ziyaretDurumu = true;
                        }
                        Dijkstra(edge.kose2);
                    }
                    else if (edge.kose2.maliyet > yeniMaliyet)
                    {
                        edge.kose2.maliyet = yeniMaliyet;
                        Dijkstra(edge.kose2);
                    }
                }
                else
                {
                    int yeniMaliyet = edge.distance + edge.kose2.maliyet;
                    if (!edge.kose1.ziyaretDurumu)
                    {
                        if (edge.kose1.maliyet > yeniMaliyet)
                        {
                            edge.kose1.maliyet       = yeniMaliyet;
                            edge.kose1.ziyaretDurumu = true;
                        }
                        Dijkstra(edge.kose1);
                    }
                    else if (edge.kose1.maliyet > yeniMaliyet)
                    {
                        edge.kose1.maliyet = yeniMaliyet;
                        Dijkstra(edge.kose1);
                    }
                }
            }
        }
示例#4
0
        public string Kruskal()
        {
            string strKruskal = "";
            int    maliyet    = 0;
            Kose   temp       = new Kose();


            foreach (Edge edge in Kenarlar)
            {
                if (!edge.kose1.ziyaretDurumu || !edge.kose2.ziyaretDurumu || (!edge.kose1.ziyaretDurumu && !edge.kose2.ziyaretDurumu))
                {
                    edge.kose2.ziyaretDurumu = true;
                    edge.kose1.ziyaretDurumu = true;
                    edge.durum  = true;
                    strKruskal += edge.kose1.data + " - " + edge.kose2.data + " : " + edge.distance + " --> " + Environment.NewLine;
                    maliyet    += edge.distance;
                }
            }
            strKruskal += "Maliyet : " + maliyet;
            return(strKruskal);
        }
示例#5
0
        public string BFS(Edge edge, Kose kose)
        {
            string strBFS = "";

            if (edge.kose2 == kose)
            {
                if (!edge.kose1.ziyaretDurumu)
                {
                    strBFS = edge.kose1.data + "  ";
                    edge.kose1.ziyaretDurumu = true;
                }
            }
            else
            {
                if (!edge.kose2.ziyaretDurumu)
                {
                    strBFS = edge.kose2.data + "  ";
                    edge.kose2.ziyaretDurumu = true;
                }
            }
            return(strBFS);
        }
示例#6
0
 public void Visit(Kose kose)
 {
     kose.ziyaretDurumu = true;
 }
示例#7
0
 public void KoseEkle(Kose kose)
 {
     Koseler.Add(kose);
 }
示例#8
0
 public Edge()
 {
     kose1 = new Kose();
     kose2 = new Kose();
 }