Advertisement
kokusz19

MestInt.KeresesV1.1

Jun 3rd, 2018
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.88 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 Kereses_beadando
  8. {
  9.     class Program
  10.      {
  11.  
  12.         /*************************************              MAIN              ******************************************/
  13.         static void Main(string[] args)
  14.         {
  15.             List<Solution> lista = new List<Solution>();
  16.  
  17.             // char[][] array feltöltése a megadott táblázattal
  18.             char[][] array = new char[7][];
  19.             populateArray(array);
  20.  
  21.             // char[][] array átmásolása Elem[][] tomb-be
  22.             Elem[][] tomb = new Elem[7][];
  23.             populateTombFromArray(tomb, array);
  24.  
  25.             // A táblázat kiíratása
  26.             kiirArray(array);
  27.  
  28.             kiirAdottKoordinataMegoldasa(tomb, lista);
  29.  
  30.             Console.ReadKey();
  31.         }
  32.  
  33.         /*************************************      TOMB FELTOLTESEK        *******************************************/
  34.         static void populateArray(char[][] array)
  35.         {
  36.             array[0] = new char[] { '1', '5', '3', '4', '3', '6', '7', '1', '1', '6' };
  37.             array[1] = new char[] { '4', '4', '3', '4', '2', '6', '2', '6', '2', '5' };
  38.             array[2] = new char[] { '1', '3', '9', '4', '5', '2', '4', '2', '9', '5' };
  39.             array[3] = new char[] { '5', '2', '3', '5', '5', '6', '4', '6', '2', '4' };
  40.             array[4] = new char[] { '1', '3', '3', '2', '5', '6', '5', '2', '3', '2' };
  41.             array[5] = new char[] { '2', '5', '2', '5', '5', '6', '4', '8', '6', '1' };
  42.             array[6] = new char[] { '9', '2', '3', '6', '5', '6', '2', '2', '2', '*' };
  43.         }
  44.  
  45.         static void populateTombFromArray(Elem[][] tomb, char[][] array)
  46.         {
  47.             for (int i = 0; i < 7; i++)
  48.             {
  49.                 tomb[i] = new Elem[10];
  50.                 for (int j = 0; j < 10; j++)
  51.                 {
  52.                     tomb[i][j] = new Elem(array[i][j]);
  53.                 }
  54.             }
  55.         }
  56.  
  57.         /*************************************          KIIRATASOK          *******************************************/
  58.         static void kiirArray(char[][] array)
  59.         {
  60.             for (int i = 0; i < 7; i++)
  61.             {
  62.                 if (i == 0)
  63.                     Console.WriteLine("\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n----------------------------------------------------------------------------------");
  64.                 Console.Write((i + 1) + ". |\t");
  65.                 for (int j = 0; j < 10; j++)
  66.                 {
  67.                     Console.Write(array[i][j] + "\t");
  68.                 }
  69.                 Console.WriteLine();
  70.             }
  71.             Console.WriteLine();
  72.         }
  73.  
  74.         static void kiirAdottKoordinataMegoldasa(Elem[][] tomb, List<Solution> lista)
  75.         {
  76.             Console.WriteLine("A megoldas az (1, 1) koordinatahoz: ");
  77.             int a = 0;
  78.             int b = 0;
  79.  
  80.             Console.WriteLine(keres(tomb, a, b, lista));
  81.         }
  82.  
  83.         /*************************************           OTHERS            ******************************************/
  84.         static int[] OrigoKoord(Elem[][] tomb)
  85.         {
  86.             int[] solution = new int[2];
  87.             int a = 0;
  88.             int b = 0;
  89.  
  90.             for (int i = 0; i < 7; i++)
  91.                 for (int j = 0; j < 10; j++)
  92.                     if (tomb[i][j].ertek == 0)
  93.                     {
  94.                         a = i;
  95.                         b = j;
  96.                     }
  97.  
  98.             solution[0] = a;
  99.             solution[1] = b;
  100.             return solution;
  101.         }
  102.  
  103.         static String keres(Elem[][] tomb, int celx, int cely, List<Solution> lista)
  104.         {
  105.             int max = 0, change = 0;
  106.             for (int k = 0; k < 70; k++)
  107.             {
  108.                 // Megnézzünk, hogy a függvény adott meghívásakor hány eleme van a listának, hogy csak addig vizsgáljuk ennek az elemeit
  109.                 max = lista.Count();
  110.  
  111.                 if (lista.Contains(lista.Find(x => x.x == celx && x.y == cely)))
  112.                     break;
  113.  
  114.                 // A cél hozzáadása a megoldások listájába, hogy később tudjunk benne hivatkozni rá
  115.                 if (k == 0)
  116.                 {
  117.                     lista.Add(new Solution(OrigoKoord(tomb)[0], OrigoKoord(tomb)[1], 1, 0, "(" + (OrigoKoord(tomb)[0] + 1) + ", " + (OrigoKoord(tomb)[1] + 1) + ")"));
  118.                     k++;
  119.                 }
  120.  
  121.  
  122.                 else
  123.                 {
  124.                     for (int j = 0; j <= 70; j++)
  125.                      {
  126.                         // A lista összes elemét vizsgálni kell
  127.                         for (int l = 1; l <= max; l++)
  128.                         {
  129.                             Solution item = lista.Where(z => z.sorszam == l).First();
  130.  
  131.                             // Egy lépés max 10 egységgel vihet oldalra
  132.                             for (int i = 1; i < 10; i++)
  133.                             {
  134.                                 // Minden vizsgálat előtt megnézzük, hogy nem-e mutatna az adott index a listán kívülre
  135.                                 // Ha a tömb valamely eleme megegyezik a 'i'-vel jelölt lépésszámmal, akkor a következő feltétel vizsgálatára lépünk
  136.                                 //
  137.                                 if ((item.x - i) >= 0 && tomb[item.x - i][item.y].ertek == i)
  138.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == item.y).Count() == 0)
  139.                                         lista.Add(new Solution((item.x - i), item.y, (lista.Max(x => x.sorszam) + 1), tomb[item.x - i][item.y].ertek, "(" + (item.x - i + 1) + ", " + (item.y + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  140.  
  141.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && tomb[item.x + i][item.y].ertek == i)
  142.                                     if (lista.Where(x => x.x == (item.x + i) && x.y == item.y).Count() == 0)
  143.                                         lista.Add(new Solution((item.x + i), item.y, (lista.Max(x => x.sorszam) + 1), tomb[item.x + i][item.y].ertek, "(" + (item.x + i + 1) + ", " + (item.y + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  144.  
  145.                                 if ((item.y - i) >= 0 && tomb[item.x][item.y - i].ertek == i)
  146.                                     if (lista.Where(x => x.x == item.x && x.y == (item.y - i)).Count() == 0)
  147.                                         lista.Add(new Solution((item.x), (item.y - i), (lista.Max(x => x.sorszam) + 1), tomb[item.x][item.y - i].ertek, "(" + (item.x + 1) + ", " + (item.y - i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  148.  
  149.                                 if ((item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x][item.y + i].ertek == i)
  150.                                     if (lista.Where(x => x.x == item.x && x.y == (item.y + i)).Count() == 0)
  151.                                         lista.Add(new Solution((item.x), item.y + i, (lista.Max(x => x.sorszam) + 1), tomb[item.x][item.y + i].ertek, "(" + (item.x + 1) + ", " + (item.y + i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  152.  
  153.  
  154.  
  155.  
  156.                                 if ((item.x - i) >= 0 && (item.y - i) >= 0 && tomb[item.x - i][item.y - i].ertek == i)
  157.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y - i)).Count() == 0)
  158.                                         lista.Add(new Solution((item.x - i), (item.y - i), (lista.Max(x => x.sorszam) + 1), tomb[item.x - i][item.y - i].ertek, "(" + (item.x - i + 1) + ", " + (item.y - i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  159.  
  160.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && (item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x + i][item.y + i].ertek == i)
  161.                                     if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y + i)).Count() == 0)
  162.                                         lista.Add(new Solution((item.x + i), (item.y + i), (lista.Max(x => x.sorszam) + 1), tomb[item.x + i][item.y + i].ertek, "(" + (item.x + i + 1) + ", " + (item.y + i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  163.  
  164.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && (item.y - i) >= 0 && tomb[item.x + i][item.y - i].ertek == i)
  165.                                     if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y - i)).Count() == 0)
  166.                                         lista.Add(new Solution((item.x + i), (item.y - i), (lista.Max(x => x.sorszam) + 1), tomb[item.x + i][item.y - i].ertek, "(" + (item.x + i + 1) + ", " + (item.y - i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  167.  
  168.                                 if ((item.x - i >= 0) && (item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x - i][item.y + i].ertek == i)
  169.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y + i)).Count() == 0)
  170.                                         lista.Add(new Solution((item.x - i), (item.y + i), (lista.Max(x => x.sorszam) + 1), tomb[item.x - i][item.y + i].ertek, "(" + (item.x - i + 1) + ", " + (item.y + i + 1) + ") -> " + lista.Where(x => x.x == item.x && x.y == item.y).First().megoldas));
  171.  
  172.                                 if (max != lista.Count)
  173.                                     change = 1;
  174.                                 else
  175.                                     continue;
  176.                             }
  177.                         }
  178.                         if (change == 0)
  179.                             break;
  180.                         else
  181.                             change = 0;
  182.                     }
  183.                 }
  184.             }
  185.  
  186.             if (lista.Contains(lista.Find(x => x.x == celx && x.y == cely)))
  187.                 return lista.Where(x => x.x == celx && x.y == cely).First().megoldas;
  188.             else
  189.                 return "Nincs megoldas erre a pontra";
  190.         }
  191.  
  192.     }
  193.  
  194.     class Elem
  195.     {
  196.         public int ertek;
  197.         public int eredmeny;
  198.         public String nyerout;
  199.  
  200.         public Elem(char ertek)
  201.         {
  202.             if (Char.IsDigit(ertek))
  203.                 this.ertek = (int)Char.GetNumericValue(ertek);
  204.             else
  205.                 this.ertek = 0;
  206.  
  207.             this.eredmeny = 0;
  208.             this.nyerout = "";
  209.         }
  210.     }
  211.  
  212.     class Solution
  213.     {
  214.         public int sorszam;
  215.         public int ertek;
  216.         public int x;
  217.         public int y;
  218.         public String megoldas = "";
  219.  
  220.         public Solution(int x, int y, int sorszam, int ertek, String megoldas)
  221.         {
  222.             this.x = x;
  223.             this.y = y;
  224.             this.sorszam = sorszam;
  225.             this.ertek = ertek;
  226.             this.megoldas = megoldas;
  227.         }
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement