public List<String> getYol(string basalangic, string bitis , Graph graph)
        {
            List<String> yol = new List<String>();

            yol.Add(bitis);

            foreach (Node n in graph.Nodes.Values)
            {
                if (n.parent != null)
                {
                    if (n.Name == bitis)
                    {
                        Node temp = n;
                        while (temp.parent.Name != basalangic)
                        {
                            yol.Add(temp.parent.Name);
                            temp = temp.parent;
                        }
                        break;
                    }
                }
            }

            return yol;
        }
        public IDictionary<string, double> CalculateDistances(Graph graph, string startingNode)
        {
            if (!graph.Nodes.Any(n => n.Key == startingNode))
                throw new ArgumentException("Starting node must be in graph.");

            InitialiseGraph(graph, startingNode);
            ProcessGraph(graph, startingNode);
            return ExtractDistances(graph);
        }
 private void ProcessGraph(Graph graph, string startingNode)
 {
     bool finished = false;
     var queue = graph.Nodes.Values.ToList();
     while (!finished)
     {
         Node nextNode = queue.OrderBy(n => n.DistanceFromStart).FirstOrDefault(n => !double.IsPositiveInfinity(n.DistanceFromStart));
         if (nextNode != null)
         {
             ProcessNode(nextNode, queue);
             queue.Remove(nextNode);
         }
         else
         {
             finished = true;
         }
     }
 }
 private void InitialiseGraph(Graph graph, string startingNode)
 {
     foreach (Node node in graph.Nodes.Values)
         node.DistanceFromStart = double.PositiveInfinity;
     graph.Nodes[startingNode].DistanceFromStart = 0;
 }
 private IDictionary<string, double> ExtractDistances(Graph graph)
 {
     return graph.Nodes.ToDictionary(n => n.Key, n => n.Value.DistanceFromStart);
 }
Esempio n. 6
0
        public override bool devam(GameData f1)
        {
            durum3SaldiriIndexleri.Clear();
            if (southAmericaBendeMi(f1))
            {
                //Ordusu diğerlerinin toplamından buyuk olduğunda her tarafa saldıracak...
                if (getToplamDusmanSayisi(f1)/2 < f1.players[f1.turn].getTotalNumberOfArmies())
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        foreach (Bolge komsu in b.komsular)
                        {
                            if (b.ordu.askerSayisi > komsu.ordu.askerSayisi && b.sahip != komsu.sahip)
                            {
                                return true;
                            }
                        }
                    }
                    return false;
                }
                else
                {
                    return false;
                }
            }
            else//Güney Amerikayı ele geçirmeye çalışacak...
            {
                if (southAmericadaToprakVarMi(f1)!=-1)
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        if (getKomsuDusmanSayisi(b) > 0)
                        {
                            foreach (Bolge b2 in b.komsular)
                            {
                                if (b2.sahip != b.sahip)
                                {
                                    if (b.ordu.askerSayisi > b2.ordu.askerSayisi+10 && buBolgeGuneyAmerikadaMi(b2))
                                    {
                                        return true;
                                    }
                                }
                            }

                        }
                    }
                }
                else//Guney Amerikada Toprak yoksa...
                {
                    Graph graph = new Graph();
                    foreach (Bolge b in f1.bolgeler)
                    {
                        graph.AddNode(b.index.ToString());
                    }

                    foreach (Bolge b in f1.bolgeler)
                    {
                        foreach (Bolge b2 in b.komsular)
                        {
                            if (b2.sahip != f1.players[f1.turn])
                            {
                                graph.AddConnection(b.index.ToString(), b2.index.ToString(), b2.ordu.askerSayisi, false);
                            }
                        }
                    }

                    var calculator = new DistanceCalculator();
                    var distances = calculator.CalculateDistances(graph, getEnGucluBolgemIndex(f1).ToString());  // Start from "G"

                    String temp = "";

                    //SA Sınırları
                    List<int> gaSinirlari = new List<int>();
                    gaSinirlari.Add(0);
                    gaSinirlari.Add(0);

                    foreach (var d in distances)
                    {
                        temp += d.Key + " - " + d.Value + "-";
                        if (d.Key == "9")
                        {
                            gaSinirlari[0] = (int)d.Value;
                        }
                        if (d.Key == "11")
                        {
                            gaSinirlari[1] = (int)d.Value;
                        }
                    }

                    int min = gaSinirlari.Min();
                    int minIndex = gaSinirlari.IndexOf(min);

                    int minBolgeIndex = 0;
                    if (minIndex == 0)
                    {
                        minBolgeIndex = 9;
                    }
                    if (minIndex == 1)
                    {
                        minBolgeIndex = 11;
                    }

                    List<String> gidilecekyol = new List<String>();

                    //calculator = new DistanceCalculator();

                    gidilecekyol = calculator.getYol(getEnGucluBolgemIndex(f1).ToString(), minBolgeIndex.ToString(), graph);

                    if (f1.bolgeler[getEnGucluBolgemIndex(f1)].ordu.askerSayisi > min + 10)//Gideceğiz Avrupaya
                    {
                        if (f1.bolgeler[getEnGucluBolgemIndex(f1)].komsular.Contains(f1.bolgeler[Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1])]))
                        {
                            saldirmaDurumu = 3;
                            durum3SaldiriIndexleri.Add(getEnGucluBolgemIndex(f1));
                            durum3SaldiriIndexleri.Add(Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1]));
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else//Biraz daha büyüyeceğiz...
                    {
                        return false;
                    }
                }
                return false;
            }
        }
Esempio n. 7
0
        public override bool devam(GameData f1)
        {
            durum3SaldiriIndexleri.Clear();
            saldirmaDurumu = 0;
            //19-25 arasını almak amaç öncelikle
            if (avrupaBendeMi(f1))//avrupa onda
            {
                foreach (Bolge b in f1.players[f1.turn].bolgeler)
                {
                    foreach (Bolge komsu in b.komsular)
                    {
                        if (b.ordu.askerSayisi > komsu.ordu.askerSayisi + 10 && b.sahip != komsu.sahip)
                        {
                            saldirmaDurumu = 1;
                            return true;
                        }
                    }
                }
                return false;
            }
            else if (avrupadaToprakVarMi(f1))//avrupada toprağm var sadece
            {
                if (getAvrupadakiAskerSayisi(f1) > getAvrupadakiDusmanSayisi(f1))//Toplam Düşmandan daha fazlaysa Saldırıya geçer //Avrupaya karşı
                {
                    //Eğer Avrupada tek başına komsusundan güçlü olan varsa saldırırız
                    //Toplamımız daha büyük olabilir ama tek tek hiçbir bölgemiz daha güçlü olmayabilir
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        if (getKomsuDusmanSayisi(b) > 0)
                        {
                            foreach (Bolge b2 in b.komsular)
                            {
                                if (b2.sahip != b.sahip)
                                {
                                    if (b.ordu.askerSayisi > b2.ordu.askerSayisi && buBolgeAvrupadaMi(b2))
                                    {
                                        saldirmaDurumu = 2;
                                        return true;
                                    }
                                }
                            }

                        }
                    }

                    return false;
                }
                else//Düşman daha fazlaysa bekler devam etmez
                {
                    return false;
                }
            }
            else//Avrupayla alakamız yoksa Avrupaya ulaşmaya çalışacağız.
            {
                Graph graph = new Graph();
                foreach (Bolge b in f1.bolgeler)
                {
                    graph.AddNode(b.index.ToString());
                }

                foreach (Bolge b in f1.bolgeler)
                {
                    foreach (Bolge b2 in b.komsular)
                    {
                        if (b2.sahip != f1.players[f1.turn])
                        {
                            graph.AddConnection(b.index.ToString(), b2.index.ToString(), b2.ordu.askerSayisi, false);
                        }
                    }
                }

                var calculator = new DistanceCalculator();
                var distances = calculator.CalculateDistances(graph, getEnGucluBolgemIndex(f1).ToString());  // Start from "G"

                String temp="";

                //Avrupa Sınırları
                List<int> avrupaSinirlari = new List<int>();
                avrupaSinirlari.Add(0);
                avrupaSinirlari.Add(0);
                avrupaSinirlari.Add(0);
                avrupaSinirlari.Add(0);

                foreach (var d in distances)
                {
                    temp+= d.Key+" - "+d.Value+"-";
                    if (d.Key == "19")
                    {
                        avrupaSinirlari[0] =(int)d.Value;
                    }
                    if (d.Key == "21")
                    {
                        avrupaSinirlari[1] = (int)d.Value;
                    }
                    if (d.Key == "24")
                    {
                        avrupaSinirlari[2] = (int)d.Value;
                    }
                    if (d.Key == "25")
                    {
                        avrupaSinirlari[3] = (int)d.Value;
                    }
                }

                int min = avrupaSinirlari.Min();
                int minIndex = avrupaSinirlari.IndexOf(min);

                int minBolgeIndex = 0;
                if (minIndex == 0)
                {
                    minBolgeIndex = 19;
                }
                if (minIndex == 1)
                {
                    minBolgeIndex = 21;
                }
                if (minIndex == 2)
                {
                    minBolgeIndex = 24;
                }
                if (minIndex == 3)
                {
                    minBolgeIndex = 25;
                }

                List<String> gidilecekyol = new List<String>();

                //calculator = new DistanceCalculator();

                gidilecekyol = calculator.getYol(getEnGucluBolgemIndex(f1).ToString(),minBolgeIndex.ToString(), graph);

                if (f1.bolgeler[getEnGucluBolgemIndex(f1)].ordu.askerSayisi > min + 10)//Gideceğiz Avrupaya
                {
                    if (f1.bolgeler[getEnGucluBolgemIndex(f1)].komsular.Contains(f1.bolgeler[Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1])]))
                    {
                        saldirmaDurumu = 3;
                        durum3SaldiriIndexleri.Add(getEnGucluBolgemIndex(f1));
                        durum3SaldiriIndexleri.Add(Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1]));
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else//Biraz daha büyüyeceğiz...
                {
                    return false;
                }
            }
        }