Advertisement
kokusz19

MestInt.Kereses.Done.Refactored

May 24th, 2018
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.33 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 Elem
  10.     {
  11.         public int ertek;
  12.         public int eredmeny;
  13.         public String nyerout;
  14.        
  15.         public Elem(char ertek)
  16.         {
  17.             if (Char.IsDigit(ertek))
  18.                 this.ertek = (int)Char.GetNumericValue(ertek);
  19.             else
  20.                 this.ertek = 0;
  21.             this.eredmeny = 0;
  22.             this.nyerout = "";
  23.         }
  24.     }
  25.  
  26.     class Solution
  27.     {
  28.         public int sorszam;
  29.         public int ertek;
  30.         public int x;
  31.         public int y;
  32.         public String megoldas = "";
  33.  
  34.         public Solution(int x, int y, int sorszam, int ertek, String megoldas)
  35.         {
  36.             this.x = x;
  37.             this.y = y;
  38.             this.sorszam = sorszam;
  39.             this.ertek = ertek;
  40.             this.megoldas = megoldas;
  41.         }
  42.  
  43.     }
  44.  
  45.     class Program
  46.      {
  47.  
  48.         /*************************************           OTHERS            ******************************************/
  49.         static int[] OrigoKoord(Elem[][] tomb)
  50.         {
  51.             int[] solution = new int[2];
  52.             int a = 0;
  53.             int b = 0;
  54.  
  55.             for (int i = 0; i < 7; i++)
  56.             {
  57.                 for (int j = 0; j < 10; j++)
  58.                 {
  59.                     if(tomb[i][j].ertek == 0)
  60.                     {
  61.                         a = i;
  62.                         b = j;
  63.                     }
  64.                 }
  65.             }
  66.             solution[0] = a;
  67.             solution[1] = b;
  68.             return solution;  
  69.         }
  70.  
  71.         static String keres(Elem[][] tomb, int celx, int cely, List<Solution> lista)
  72.         {
  73.             int max=0;
  74.             for (int k = 0; k < 70; k++)
  75.             {
  76.                 max = lista.Count();
  77.  
  78.                 if (k == 0)
  79.                 {
  80.                     lista.Add(new Solution(OrigoKoord(tomb)[0], OrigoKoord(tomb)[1], 1, 0, "(" + (OrigoKoord(tomb)[0] + 1) + ", " + (OrigoKoord(tomb)[1] + 1) + ")"));
  81.                     k++;
  82.                 }
  83.  
  84.  
  85.                 else
  86.                 {
  87.                     for (int j = 0; j <= 70; j++)
  88.                     {
  89.                         for (int l = 1; l <= max; l++)
  90.                         {
  91.                             Solution item = lista.Where(z => z.sorszam == l).First();
  92.                             for (int i = 1; i < 10; i++)
  93.                             {
  94.                                 if ((item.x - i) >= 0 && tomb[item.x - i][item.y].ertek == i)
  95.                                 {
  96.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == item.y).Count() == 0)
  97.                                     {
  98.                                         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));
  99.                                         goto folytat;
  100.                                     }
  101.                                 }
  102.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && tomb[item.x + i][item.y].ertek == i)
  103.                                 {
  104.                                     if (lista.Where(x => x.x == (item.x + i) && x.y == item.y).Count() == 0)
  105.                                     {
  106.                                         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));
  107.                                         goto folytat;
  108.                                     }
  109.                                 }
  110.                                 if ((item.y - i) >= 0 && tomb[item.x][item.y - i].ertek == i)
  111.                                 {
  112.                                     if (lista.Where(x => x.x == item.x && x.y == (item.y - i)).Count() == 0)
  113.                                     {
  114.                                         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));
  115.                                         goto folytat;
  116.                                     }
  117.                                 }
  118.                                 if ((item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x][item.y + i].ertek == i)
  119.                                 {
  120.                                     if (lista.Where(x => x.x == item.x && x.y == (item.y + i)).Count() == 0)
  121.                                     {
  122.                                         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));
  123.                                         goto folytat;
  124.                                     }
  125.                                 }
  126.  
  127.  
  128.  
  129.                                 if ((item.x - i) >= 0 && (item.y - i) >= 0 && tomb[item.x - i][item.y - i].ertek == i)
  130.                                 {
  131.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y - i)).Count() == 0)
  132.                                     {
  133.                                         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));
  134.                                         goto folytat;
  135.                                     }
  136.                                 }
  137.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && (item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x + i][item.y + i].ertek == i)
  138.                                 {
  139.                                     if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y + i)).Count() == 0)
  140.                                     {
  141.                                         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));
  142.                                         goto folytat;
  143.                                     }
  144.                                 }
  145.                                 if ((item.x + i) <= OrigoKoord(tomb)[0] && (item.y - i) >= 0 && tomb[item.x + i][item.y - i].ertek == i)
  146.                                 {
  147.                                     if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y - i)).Count() == 0)
  148.                                     {
  149.                                         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));
  150.                                         goto folytat;
  151.                                     }
  152.                                 }
  153.                                 if ((item.x - i >= 0) && (item.y + i) <= OrigoKoord(tomb)[1] && tomb[item.x - i][item.y + i].ertek == i)
  154.                                 {
  155.                                     if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y + i)).Count() == 0)
  156.                                     {
  157.                                         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));
  158.                                         goto folytat;
  159.                                     }
  160.                                 }
  161.                                 else
  162.                                     continue;
  163.                             }
  164.                         }
  165.                         folytat: continue;
  166.                     }
  167.                 }
  168.             }
  169.             if (lista.Contains(lista.Find(x => x.x == celx && x.y == cely)))
  170.                 return lista.Where(x => x.x == celx && x.y == cely).First().megoldas;
  171.             else
  172.                 return "Nincs megoldas erre a pontra";
  173.         }
  174.  
  175.         /*************************************      TOMB FELTOLTESEK        *******************************************/
  176.         static void populateArray(char[][] array)
  177.         {
  178.             array[0] = new char[] { '1', '5', '3', '4', '3', '6', '7', '1', '1', '6' };
  179.             array[1] = new char[] { '4', '4', '3', '4', '2', '6', '2', '6', '2', '5' };
  180.             array[2] = new char[] { '1', '3', '9', '4', '5', '2', '4', '2', '9', '5' };
  181.             array[3] = new char[] { '5', '2', '3', '5', '5', '6', '4', '6', '2', '4' };
  182.             array[4] = new char[] { '1', '3', '3', '2', '5', '6', '5', '2', '3', '2' };
  183.             array[5] = new char[] { '2', '5', '2', '5', '5', '6', '4', '8', '6', '1' };
  184.             array[6] = new char[] { '9', '2', '3', '6', '5', '6', '2', '2', '2', '*' };
  185.         }
  186.  
  187.         static void populateTombFromArray(Elem[][] tomb, char[][] array)
  188.         {
  189.             for (int i = 0; i < 7; i++)
  190.             {
  191.                 tomb[i] = new Elem[10];
  192.                 for (int j = 0; j < 10; j++)
  193.                 {
  194.                     tomb[i][j] = new Elem(array[i][j]);
  195.                 }
  196.             }
  197.         }
  198.  
  199.         /*************************************          KIIRATASOK          *******************************************/
  200.         static void kiirArray(char[][] array)
  201.         {
  202.             for (int i = 0; i < 7; i++)
  203.             {
  204.                 if (i == 0)
  205.                     Console.WriteLine("\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n----------------------------------------------------------------------------------");
  206.                 Console.Write((i + 1) + ". |\t");
  207.                 for (int j = 0; j < 10; j++)
  208.                 {
  209.                     Console.Write(array[i][j] + "\t");
  210.                 }
  211.                 Console.WriteLine();
  212.             }
  213.             Console.WriteLine();
  214.         }
  215.  
  216.         static void kiirAdottKoordinata(Elem[][] tomb, List<Solution> lista)
  217.         {
  218.             Console.WriteLine("\nAdjon meg egy sor, mely egy elemere kivancsi: ");
  219.             int a = Int32.Parse(Console.ReadLine()) - 1;
  220.             Console.WriteLine("Adja meg a sor egy elemét, amelyre kivancsi: ");
  221.             int b = Int32.Parse(Console.ReadLine()) - 1;
  222.            
  223.             Console.WriteLine(keres(tomb, a, b, lista));
  224.         }
  225.  
  226.         static void kiirMegoldhato(List<Solution> lista)
  227.         {
  228.             Console.WriteLine("Megoldhato koordinatak: ");
  229.             for (int i = 0; i < 7; i++)
  230.             {
  231.                 if (i == 0)
  232.                     Console.WriteLine("\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n----------------------------------------------------------------------------------");
  233.                 Console.Write((i + 1) + ". |\t");
  234.                 for (int j = 0; j < 10; j++)
  235.                 {
  236.                     if (lista.Contains(lista.Find(x => x.x == i && x.y == j)))
  237.                         Console.Write(lista.Where(x => x.x == i && x.y == j).First().ertek + "\t");
  238.                     else
  239.                         Console.Write("-\t");
  240.                 }
  241.                 Console.WriteLine();
  242.             }
  243.         }
  244.  
  245.         /*************************************              MAIN              ******************************************/
  246.         static void Main(string[] args)
  247.         {
  248.  
  249.             List<Solution> lista = new List<Solution>();
  250.  
  251.             char[][] array = new char[7][];
  252.             populateArray(array);
  253.  
  254.             Elem[][] tomb = new Elem[7][];
  255.             populateTombFromArray(tomb, array);
  256.  
  257.             kiirArray(array);
  258.  
  259.             kiirAdottKoordinata(tomb, lista);
  260.  
  261.             kiirArray(array);
  262.             kiirMegoldhato(lista);
  263.  
  264.             Console.ReadKey();
  265.         }
  266.     }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement