Advertisement
kokusz19

MestInt.KetszemelyesV9.JatekfaFeltoltesHiba

Jun 3rd, 2018
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.99 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ketszemelyesV3
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             List<Csucs> fa = new List<Csucs>();
  14.             treeSetup(fa);
  15.  
  16.             Console.WriteLine("#####################  LISTA  #####################");
  17.             kiirFullLista(fa);
  18.  
  19.  
  20.             globaljatekfa.Add(new Jatekfa(0, 0, 0, fa));
  21.  
  22.             Console.WriteLine("#####################  JATEKFAK  #####################");
  23.             jatekfaFeltolt(globaljatekfa);
  24.  
  25.  
  26.             foreach (Jatekfa jatekfa in globaljatekfa)
  27.                 jatekfa.kiir();
  28.  
  29.  
  30.             Console.ReadKey();
  31.         }
  32.  
  33.         static void treeSetup(List<Csucs> lista)
  34.         {
  35.             /*
  36.              *                  A
  37.              *         B                C
  38.              *     D   E   F        G       H
  39.              *   I   J     K                L
  40.              *
  41.              */
  42.  
  43.             lista.Add(new Csucs(0, 1, "A"));
  44.             lista.Add(new Csucs(1, 2, "B"));
  45.             lista.Add(new Csucs(1, 3, "C"));
  46.             lista.Add(new Csucs(2, 4, "D"));
  47.             lista.Add(new Csucs(2, 5, "E"));
  48.             lista.Add(new Csucs(2, 6, "F"));
  49.             lista.Add(new Csucs(3, 7, "G"));
  50.             /*lista.Add(new Csucs(3, 8, "H"));
  51.             lista.Add(new Csucs(4, 9, "I"));
  52.             lista.Add(new Csucs(4, 10, "J"));
  53.             lista.Add(new Csucs(6, 11, "K"));
  54.             lista.Add(new Csucs(8, 12, "L"));
  55.             */
  56.             foreach (Csucs item in lista)
  57.             {
  58.                 foreach (Csucs item2 in lista)
  59.                 {
  60.                     if (item.sorszam != item2.sorszam && item.sorszam == item2.szulosorszam)
  61.                     {
  62.                         item.gyerekekInt.Add(item2.sorszam);
  63.                         item.gyerekekString.Add(lista.Where(x => x.sorszam == item2.sorszam).First().nev);
  64.  
  65.                     }
  66.                 }
  67.                 item.letezik = 1;
  68.             }
  69.         }
  70.  
  71.         public static void kiirFullLista(List<Csucs> lista)
  72.         {
  73.             //Console.WriteLine("###############\t   Lista\t##################");
  74.             foreach (Csucs item in lista)
  75.             {
  76.                 if (item.letezik == 1)
  77.                 {
  78.                     if(item.szulosorszam == 0)
  79.                         Console.Write(item.sorszam + ".\t" + item.nev + "\t(szulo: * gyerekei:");
  80.                     else
  81.                         Console.Write(item.sorszam + ".\t" + item.nev + "\t(szulo: " + item.szulosorszam  + " gyerekei:");
  82.                     if (item.gyerekekInt.Count != 0)
  83.                     {
  84.                         foreach (int item2 in item.gyerekekInt)
  85.                         {
  86.                             Console.Write("  " + item2 + "(" + lista.Find(x => x.sorszam == item2).nev + ")");
  87.                         }
  88.                     }
  89.                     else
  90.                         Console.Write("  nincs gyereke");
  91.                     Console.WriteLine(")");
  92.                 }
  93.             }
  94.             Console.WriteLine("\n\n");
  95.         }
  96.  
  97.         public static List<Jatekfa> globaljatekfa = new List<Jatekfa>();
  98.  
  99.         static void megold(List<Jatekfa> jf)
  100.         {
  101.  
  102.             List<Jatekfa> localjf = jf.ToList();
  103.  
  104.             // Végigmegyünk az globaljatekfa összes elemén és hogy ha még nincs kiterjeszve, akkor kiterjesztjük
  105.             foreach (Jatekfa jatekfa in localjf.Where(x=>x.kiterjesztve == 0))
  106.             {
  107.                 int canbechanged = 0;
  108.  
  109.                 // Ha nincs kiterjesztve a fa, akkor nézzük csak meg, hogy az adott fából lehet-e törölni csúcs gyerekeit, ha lehet, akkor a canbechanges változót egyre állítjuk
  110.                 if (jatekfa.kiterjesztve == 0)
  111.                     foreach (Csucs csucs in jatekfa.adottFaAllapot)
  112.                         if(csucs.letezik == 1 && csucs.szulosorszam != 0)
  113.                             canbechanged = 1;
  114.  
  115.                 // Ha lehet gyereket törölni az adott fából, akkor a fáról egy lokális másolatot készítve szerkesztjük a fát az összes lehetséges állapotra from i = 0 to i = localcopy.Count() és létezzen a csúcs.
  116.                 // Ezeket a szerkesztett állapotokat hozzáadjuk a globális jatekfa listához kiterjesztve=0-val, amit vizsgáltunk, ott pedig jatekfa.kiterjesztve = 1
  117.                 if(canbechanged == 1)
  118.                 {
  119.                     globaljatekfa.Find(x => x == jatekfa).kiterjesztve = 1;
  120.                     //jatekfa.kiterjesztve = 1;
  121.                     // Jatekfa állapotok elmentése, hogy rekurzív hívásnál feltudjuk használni egyszerűen
  122.                     int szulo = jatekfa.sorszam+1;
  123.                     int lepes = jatekfa.lepes+1;
  124.  
  125.  
  126.                     // Update: Ha több elem létezik, mint gyökér, akkor lehet még törölni
  127.                     if (jatekfa.adottFaAllapot.Where(x => x.letezik != 0).Count() > jatekfa.adottFaAllapot.Where(x=>x.szulosorszam == 0).Count())
  128.                     {
  129.  
  130.                         // Az összes csúcson végigmegyünk
  131.                         for (int i = 1; i <= jatekfa.adottFaAllapot.Count(); i++)
  132.                         {
  133.                             //Console.WriteLine("iteration: " + i);
  134.                             // Lokalis lista letrehozasa a fa adott allapotarol
  135.                             List<Csucs> listacopy = new List<Csucs>();
  136.                             foreach (var csucs in jatekfa.adottFaAllapot)
  137.                                 listacopy.Add(new Csucs(csucs.szulosorszam, csucs.sorszam, csucs.nev, csucs.letezik, csucs.gyerekekInt.ToList(), csucs.gyerekekString.ToList()));
  138.  
  139.                             // Ha a vizsgált csúcs létezik, viszont nincs gyereke, akkor nem lehet vele mit csinálni
  140.                             int sorszam = i;
  141.                             if (listacopy.Where(x => x.sorszam == sorszam && x.letezik == 1 && x.gyerekekInt.Count() == 0).Count() != 0)
  142.                                 continue;
  143.  
  144.                             // Ha törölni lehet a vizsgált csúcs gyerekeit
  145.                             else
  146.                             {
  147.                                 //Console.WriteLine(i);
  148.                                 // unoka.szulosorszam updateje: gyerekek kigyűjtése listába és ezeken végigmenve a szülőjének a gyökér csúcsot (0) adjuk meg
  149.                                 List<int> unokak = new List<int>();
  150.                                 foreach (Csucs gyerek in listacopy.Where(x => x.szulosorszam == sorszam))
  151.                                     foreach (int unoka in gyerek.gyerekekInt)
  152.                                         unokak.Add(unoka);
  153.                                 foreach (Csucs item in listacopy)
  154.                                     if (unokak.Contains(item.sorszam) && item.letezik == 1)
  155.                                         item.szulosorszam = 0;
  156.  
  157.                                 // szülő gyerekeinek logikai törlése
  158.                                 foreach (int gyereke in listacopy.Find(x => x.sorszam == sorszam).gyerekekInt)
  159.                                 {
  160.                                     foreach (var csucs in listacopy)
  161.                                     {
  162.                                         if (csucs.sorszam == gyereke)
  163.                                         {
  164.                                             listacopy.Find(x => x.sorszam == csucs.sorszam).letezik = 0;
  165.                                             listacopy.Find(x => x.sorszam == csucs.sorszam).gyerekekInt.Clear();
  166.                                             listacopy.Find(x => x.sorszam == csucs.sorszam).gyerekekString.Clear();
  167.                                         }
  168.                                     }
  169.                                 }
  170.  
  171.                                 // szülő gyerekeinek updateje
  172.                                 listacopy.Find(x => x.sorszam == sorszam).gyerekekInt.Clear();
  173.                                 listacopy.Find(x => x.sorszam == sorszam).gyerekekString.Clear();
  174.  
  175.                                 // törlés után a lehetséges állapotot hozzáadjuk a globalfahoz
  176.                                 if (globaljatekfa.Where(x=>x.adottFaAllapot == listacopy).Count() == 0)
  177.                                 {
  178.                                     kiirFullLista(listacopy);
  179.                                     globaljatekfa.Add(new Jatekfa(szulo, lepes, globaljatekfa.Count(), listacopy));
  180.                                     megold(globaljatekfa);
  181.                                 }
  182.                             }
  183.                         } // Az összes csúcson ezzel a forral mentünk végig
  184.                     } // Update: Ha a fából lehet törölni
  185.                 } // Ha a fából lehet törölni
  186.                 else globaljatekfa.Find(x => x == jatekfa).kiterjesztve = 1;
  187.             } // Foreach az összes játékfára
  188.  
  189.         } // End of megold
  190.     } // End of class Program
  191.  
  192.     public class Csucs
  193.     {
  194.         public int szulosorszam;
  195.         public int sorszam;
  196.         public String nev;
  197.         public int letezik;
  198.  
  199.         public List<int> gyerekekInt = new List<int>();
  200.         public List<String> gyerekekString = new List<string>();
  201.  
  202.         public Csucs(int szulosorszam, int sorszam, String nev)
  203.         {
  204.             this.szulosorszam = szulosorszam;
  205.             this.sorszam = sorszam;
  206.             this.nev = nev;
  207.             this.letezik = 1;
  208.         }
  209.  
  210.         public Csucs(int szulosorszam, int sorszam, String nev, int letezik, List<int> gyerekekInt, List<String> gyerekekString)
  211.         {
  212.             this.szulosorszam = szulosorszam;
  213.             this.sorszam = sorszam;
  214.             this.nev = nev;
  215.             this.letezik = letezik;
  216.             this.gyerekekInt = gyerekekInt.ToList();
  217.             this.gyerekekString = gyerekekString.ToList();
  218.         }
  219.     }
  220.  
  221.     public class Jatekfa
  222.     {
  223.         public int szulo;
  224.         public int lepes;
  225.         public int sorszam;
  226.         public List<Csucs> adottFaAllapot;
  227.         public int kiterjesztve;
  228.  
  229.         public Jatekfa(int szulo, int lepes, int sorszam, List<Csucs> adottFaAllapot)
  230.         {
  231.             this.szulo = szulo;
  232.             this.lepes = lepes;
  233.             this.sorszam = sorszam;
  234.             this.adottFaAllapot = adottFaAllapot;
  235.             this.kiterjesztve = 0;
  236.         }
  237.  
  238.         public Jatekfa(int szulo, int lepes, int sorszam, List<Csucs> adottFaAllapot, int kiterjesztve)
  239.         {
  240.             this.szulo = szulo;
  241.             this.lepes = lepes;
  242.             this.sorszam = sorszam;
  243.             this.adottFaAllapot = adottFaAllapot;
  244.             this.kiterjesztve = kiterjesztve;
  245.         }
  246.  
  247.         public void kiir()
  248.         {
  249.              Console.WriteLine("JATEKFA\t" + (this.sorszam+1) + ". elem (szulo : " + this.szulo + ", " + this.lepes + ". lepes)");
  250.              ketszemelyesV3.Program.kiirFullLista(this.adottFaAllapot);
  251.         }
  252.     }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement