Advertisement
kokusz19

MestInt.KetszemelyesV8.MaybeThisWillWork.StackOverflow

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