Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.82 KB | None | 0 0
  1.  // ZADANIE 4
  2.         static void wypiszZad4()
  3.         {
  4.             int[] studenci  =  { 0, 1, 2, 3 };
  5.             int[] pytania   =  { 2, 1, 3, 2 };
  6.  
  7.             // zlozonosc nlogn  taka sama jak dla quicksorta, rozwiazanie jest optymalne  STF shortest time first
  8.  
  9.             UstalKolejnosc(studenci, pytania);
  10.         }
  11.  
  12.         static void UstalKolejnosc(int[] studenci, int[] pytania)
  13.         {
  14.             QuickSortInt(0, studenci.Length - 1, pytania, studenci);
  15.  
  16.             Console.WriteLine("Kolejnosc przyjmowania studentow");
  17.  
  18.             for (int i = 0; i < studenci.Length; i++)
  19.             {
  20.                 Console.WriteLine($"{i+1}. Student #{studenci[i]}");
  21.             }
  22.         }
  23.  
  24.         static void QuickSortInt(int lo, int hi, int[] t1, int[] t2)
  25.         {
  26.             int i = lo;
  27.             int j = hi;
  28.             int mid = t1[(lo + hi) / 2];
  29.  
  30.             do
  31.             {
  32.                 while (mid > t1[i]) i++;
  33.                 while (mid < t1[j]) j--;
  34.                
  35.                 if (i <= j)
  36.                 {
  37.                     int temp = t1[i];
  38.                     t1[i] = t1[j];
  39.                     t1[j] = temp;
  40.  
  41.                     int temp2 = t2[i];
  42.                     t2[i] = t2[j];
  43.                     t2[j] = temp2;
  44.  
  45.                     i++;
  46.                     j--;
  47.                 }
  48.             } while (i <= j);
  49.  
  50.             if (j > lo) QuickSortInt(lo, j, t1 ,t2);
  51.             if (i < hi) QuickSortInt(i, hi, t1, t2);
  52.  
  53.  
  54.         }
  55.  
  56.  
  57.         // ZADANIE 5
  58.         static void wypiszZad5()
  59.         {
  60.             int[,] d =
  61.             {
  62.                 {2,3,5,2 },
  63.                 {1,0,6,1},
  64.                 {8,9,2,1},
  65.                 {2,5,1,3}
  66.             };
  67.  
  68.             int[,] p =
  69.             {
  70.                 {2,0,1},
  71.                 {1,2,5},
  72.                 {6,2,1},
  73.                 {0,7,0},
  74.                 {2,5,4}
  75.             };
  76.  
  77.             int[,] s =
  78.             {
  79.                 {9,4,1 },
  80.                 {5,2,1},
  81.                 {6,3,1},
  82.                 {11, 3, 2}
  83.             };
  84.  
  85.             int x = 3;
  86.             int y = 4;
  87.  
  88.             int[,] kroki = new int[y + 1, x + 1];
  89.             int[,] wynik = new int[y + 1, x + 1];
  90.  
  91.             // zlozonosc  x*y
  92.             findPath(p, d, s, kroki, wynik, x, y);
  93.  
  94.             wypiszKroki(kroki);
  95.         }
  96.  
  97.         static void wypiszKroki(int[,] kroki)
  98.         {
  99.             Stack<string> str = new Stack<string>();
  100.             int i = kroki.GetLength(0) - 1;
  101.             int j = kroki.GetLength(1) - 1;
  102.             int m = 0;
  103.  
  104.             while (i >= 0 && j >= 0)
  105.             {
  106.                 if (kroki[i, j] == 1)
  107.                 {
  108.                     str.Push("Skoks");
  109.                     i--;
  110.                     j--;
  111.                 }
  112.                 else if (kroki[i, j] == 2)
  113.                 {
  114.                     str.Push("Dół");
  115.                     i--;
  116.  
  117.                 }
  118.                 else if (kroki[i, j] == 3)
  119.                 {
  120.                     str.Push("Prawo");
  121.                     j--;
  122.  
  123.                 }
  124.  
  125.                 if (i == 0 && j == 0)
  126.                 {
  127.                     i = -1;
  128.                     j = -1;
  129.                 }
  130.             }
  131.  
  132.             while (str.Count != 0)
  133.                 Console.WriteLine(str.Pop());
  134.  
  135.         }
  136.  
  137.         static void findPath(int[,] p, int[,] d, int[,] s, int[,] kroki, int[,] wynik, int x, int y)
  138.         {
  139.             for (int i = 1; i < x + 1; i++)
  140.             {
  141.                 wynik[0, i] = wynik[0, i - 1] + p[0, i - 1];
  142.                 kroki[0, i] = 3; // PRAWO
  143.             }
  144.             for (int i = 1; i < y + 1; i++)
  145.             {
  146.                 wynik[i, 0] = wynik[i - 1, 0] + d[i - 1, 0];
  147.                 kroki[i, 0] = 2; // DÓŁ
  148.             }
  149.  
  150.             for (int i = 1; i < y + 1; i++)
  151.             {
  152.                 for (int j = 1; j < x + 1; j++)
  153.                 {
  154.                     int ss = wynik[i - 1, j - 1] + s[i - 1, j - 1];
  155.                     int dd = wynik[i - 1, j] + d[i - 1, j];
  156.                     int pp = wynik[i, j - 1] + p[i, j - 1];
  157.                     List<int> temp = new List<int>() { ss, dd, pp };
  158.                     int min = temp.Min();
  159.                     int krok = temp.IndexOf(min) + 1; // indeks 0 + 1 = 1 czyli skoks indeks 1 + 1 = 2 czyli dol itd ...
  160.                     wynik[i, j] = min;
  161.                     kroki[i, j] = krok;
  162.                 }
  163.             }
  164.         }
  165.  
  166.         // ZADANIE 2
  167.  
  168.         static void wypiszZad2()
  169.         {
  170.             Console.WriteLine("Zadanie 2 quicksort początek");
  171.             Console.WriteLine();
  172.  
  173.  
  174.             string[] tStr = new string[] { "aa", "bb", "zz", "cc", "człowiek", "dd", "fantastico działa" };
  175.             string[] tStr2 = new string[] { "Kolos z algorytmow", "Fajny quicksort", "Niesamowite" };
  176.             QuickSort(0, tStr.Length - 1, tStr);
  177.  
  178.             for (int m = 0; m < tStr.Length; m++)
  179.             {
  180.                 Console.WriteLine(tStr[m]);
  181.             }
  182.  
  183.             Console.WriteLine();
  184.            
  185.             QuickSort(0, tStr2.Length - 1, tStr2);
  186.  
  187.             for (int m = 0; m < tStr2.Length; m++)
  188.             {
  189.                 Console.WriteLine(tStr2[m]);
  190.             }
  191.  
  192.  
  193.             Console.WriteLine();
  194.             Console.WriteLine("Koniec zad 2");
  195.             Console.WriteLine();
  196.             Console.WriteLine();
  197.         }
  198.  
  199.         static void QuickSort(int lo, int hi, string[] t)
  200.         {
  201.             int i = lo;
  202.             int j = hi;
  203.             string mid = t[(lo + hi) / 2];
  204.  
  205.             do
  206.             {
  207.                 while (StringGreater(t[i], mid)) i++;
  208.                 while (StringGreater(mid, t[j])) j--;
  209.  
  210.                 if (i <= j)
  211.                 {
  212.                     string temp = t[i];
  213.                     t[i] = t[j];
  214.                     t[j] = temp;
  215.                     i++;
  216.                     j--;
  217.                 }
  218.             } while (i <= j);
  219.  
  220.             if (j > lo) QuickSort(lo, j, t);
  221.             if (i < hi) QuickSort(i, hi, t);
  222.  
  223.            
  224.         }
  225.  
  226.         static bool StringGreater(string s1, string s2)
  227.         {
  228.             int m = 0;
  229.             int i = s1.Length;
  230.             int j = s2.Length;
  231.  
  232.             while (m < i && m < j)
  233.             {
  234.                 if (s1[m] > s2[m])
  235.                     return true;
  236.                 else
  237.                     return false;
  238.             }
  239.  
  240.             return false;
  241.         }
  242.  
  243.         /*
  244.          ZADANIE 1
  245.  
  246.         T(n) = n^2 * log(n)
  247.  
  248.         n = 8  64log8 = 64 * 3 = 192
  249.         n = 16 256log16 = 256 * 4 = 1024
  250.  
  251.         192 - 30 s
  252.         1024 - x s
  253.  
  254.         x = 1024 * 30 / 192 = 160 s
  255.  
  256.         160 s / 2 = 80 s
  257.  
  258.         ODP wykonanie algorytmu na drugim komputerze (szybszym) zajmie 80 sekund
  259.          
  260.          
  261.          */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement