Advertisement
kokusz19

MestInt.KeresesV4.Completed

Jun 3rd, 2018
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.40 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 célpont hozzáadása a listához
  26.             lista.Add(new Solution(6, 9, 1, 0, "(7, 10)"));
  27.  
  28.             // A táblázat kiíratása
  29.             kiirArray(array);
  30.  
  31.             // A megoldás (ha van) kiíratása
  32.             Console.WriteLine("A megoldas az (1, 1) koordinatahoz: " + keres(tomb, lista));
  33.  
  34.             Console.ReadKey();
  35.         }
  36.  
  37.         static void populateArray(char[][] array)
  38.         {
  39.             array[0] = new char[] { '1', '5', '3', '4', '3', '6', '7', '1', '1', '6' };
  40.             array[1] = new char[] { '4', '4', '3', '4', '2', '6', '2', '6', '2', '5' };
  41.             array[2] = new char[] { '1', '3', '9', '4', '5', '2', '4', '2', '9', '5' };
  42.             array[3] = new char[] { '5', '2', '3', '5', '5', '6', '4', '6', '2', '4' };
  43.             array[4] = new char[] { '1', '3', '3', '2', '5', '6', '5', '2', '3', '2' };
  44.             array[5] = new char[] { '2', '5', '2', '5', '5', '6', '4', '8', '6', '1' };
  45.             array[6] = new char[] { '9', '2', '3', '6', '5', '6', '2', '2', '2', '*' };
  46.         }
  47.  
  48.         static void populateTombFromArray(Elem[][] tomb, char[][] array)
  49.         {
  50.             for (int i = 0; i < 7; i++)
  51.             {
  52.                 tomb[i] = new Elem[10];
  53.                 for (int j = 0; j < 10; j++)
  54.                 {
  55.                     tomb[i][j] = new Elem(array[i][j]);
  56.                 }
  57.             }
  58.         }
  59.  
  60.         static void kiirArray(char[][] array)
  61.         {
  62.             for (int i = 0; i < 7; i++)
  63.             {
  64.                 if (i == 0)
  65.                     Console.WriteLine("\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n----------------------------------------------------------------------------------");
  66.                 Console.Write((i + 1) + ". |\t");
  67.                 for (int j = 0; j < 10; j++)
  68.                 {
  69.                     Console.Write(array[i][j] + "\t");
  70.                 }
  71.                 Console.WriteLine();
  72.             }
  73.             Console.WriteLine();
  74.         }
  75.        
  76.         static String keres(Elem[][] tomb, List<Solution> lista)
  77.         {
  78.             int max = 0;
  79.  
  80.             // Legrosszabb esetben rows*cols-szor kell megvizsgálni az elemeket (pl ha minden lentebbi vizsgálat során csak 1-1 elem kerülne bele a listába és így az összes elemen végig kéne menni, hogy eljussunk a célba
  81.             for (int k = 1; k < 7*10; k++)
  82.             {
  83.                 // 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
  84.                 max = lista.Count();
  85.  
  86.                 // Ha a listában szerepel a kiindulási állapot, akkor a célba ellehet jutni belőle, szóval nem kell tovább vizsgálni
  87.                 if (lista.Contains(lista.Find(x => x.x == 0 && x.y == 0)))
  88.                     break;
  89.  
  90.                 else
  91.                 {
  92.                     // A lista összes elemét vizsgálni kell
  93.                     for (int l = 1; l <= max; l++)
  94.                     {
  95.                         // A könyebb kezelhetőség érdekében lementjük lokálisan a lista adott elemét
  96.                         Solution item = lista.Where(z => z.sorszam == l).First();
  97.  
  98.                         // A csúcstól max 10 távolságra lévő csúcsok vizsgálata, hogy azok eljuttatnak-e egy olyan állapotba, ami megoldáshoz vezet
  99.                         for (int i = 1; i < 10; i++)
  100.                         {
  101.                             // Minden vizsgálat előtt megnézzük, hogy nem-e mutatna az adott index a listán kívülre és hogy a távolsága megegyezik-e a pont értékével
  102.                                 // Ha a megoldások listában nem szerepel még a vizsgált pont, akkor hozzáadjuk
  103.                             if ((item.x - i) >= 0 && tomb[item.x - i][item.y].ertek == i)
  104.                                 if (lista.Where(x => x.x == (item.x - i) && x.y == item.y).Count() == 0)
  105.                                     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));
  106.  
  107.                             if ((item.x + i) <= 6 && tomb[item.x + i][item.y].ertek == i)
  108.                                 if (lista.Where(x => x.x == (item.x + i) && x.y == item.y).Count() == 0)
  109.                                     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));
  110.  
  111.                             if ((item.y - i) >= 0 && tomb[item.x][item.y - i].ertek == i)
  112.                                 if (lista.Where(x => x.x == item.x && x.y == (item.y - i)).Count() == 0)
  113.                                     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));
  114.  
  115.                             if ((item.y + i) <= 9 && tomb[item.x][item.y + i].ertek == i)
  116.                                 if (lista.Where(x => x.x == item.x && x.y == (item.y + i)).Count() == 0)
  117.                                     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));
  118.  
  119.  
  120.  
  121.  
  122.                             if ((item.x - i) >= 0 && (item.y - i) >= 0 && tomb[item.x - i][item.y - i].ertek == i)
  123.                                 if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y - i)).Count() == 0)
  124.                                     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));
  125.  
  126.                             if ((item.x + i) <= 6 && (item.y + i) <= 9 && tomb[item.x + i][item.y + i].ertek == i)
  127.                                 if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y + i)).Count() == 0)
  128.                                     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));
  129.  
  130.                             if ((item.x + i) <= 6 && (item.y - i) >= 0 && tomb[item.x + i][item.y - i].ertek == i)
  131.                                 if (lista.Where(x => x.x == (item.x + i) && (x.y == item.y - i)).Count() == 0)
  132.                                     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));
  133.  
  134.                             if ((item.x - i >= 0) && (item.y + i) <= 9 && tomb[item.x - i][item.y + i].ertek == i)
  135.                                 if (lista.Where(x => x.x == (item.x - i) && x.y == (item.y + i)).Count() == 0)
  136.                                     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));
  137.                         }
  138.                     }
  139.                 }
  140.             }
  141.  
  142.             if (lista.Contains(lista.Find(x => x.x == 0 && x.y == 0)))
  143.                 return lista.Where(x => x.x == 0 && x.y == 0).First().megoldas;
  144.             else
  145.                 return "Nincs megoldas erre a pontra";
  146.         }
  147.  
  148.     }
  149.  
  150.     class Elem
  151.     {
  152.         public int ertek;
  153.         public int eredmeny;
  154.         public String nyerout;
  155.  
  156.         public Elem(char ertek)
  157.         {
  158.             if (Char.IsDigit(ertek))
  159.                 this.ertek = (int)Char.GetNumericValue(ertek);
  160.             else
  161.                 this.ertek = 0;
  162.  
  163.             this.eredmeny = 0;
  164.             this.nyerout = "";
  165.         }
  166.     }
  167.  
  168.     class Solution
  169.     {
  170.         public int sorszam;
  171.         public int ertek;
  172.         public int x;
  173.         public int y;
  174.         public String megoldas = "";
  175.  
  176.         public Solution(int x, int y, int sorszam, int ertek, String megoldas)
  177.         {
  178.             this.x = x;
  179.             this.y = y;
  180.             this.sorszam = sorszam;
  181.             this.ertek = ertek;
  182.             this.megoldas = megoldas;
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement