Advertisement
Adik28

Algorytm z kolokwium

Jan 25th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.33 KB | None | 0 0
  1. public IEnumerable<IEnumerable<List<double>>> grupuj(List<List<double>> probki)
  2.         {
  3.             //główna funkcja do napisania,
  4.  
  5.             /// przykładowa zawartość funkcji, początek
  6.             List<List<List<double>>> grupy = new List<List<List<double>>>();
  7.  
  8.             for (int i = 0; i < probki.Count; i++)
  9.             {
  10.                 grupy.Add(new List<List<double>> { probki[i] });
  11.             }
  12.  
  13.             int tmp = 0;
  14.  
  15.             while (tmp < 30)
  16.             {
  17.  
  18.                 Dictionary<List<int>, double> odleglosci = new Dictionary<List<int>, double>();
  19.                 foreach (var grupa in grupy)
  20.                 {
  21.                     if (grupa.Count > tmp)
  22.                     {
  23.                         tmp = grupa.Count;
  24.                     }
  25.                 }
  26.  
  27.  
  28.                 for (int a = 0; a < grupy.Count; a++)
  29.                 {
  30.                     for (int b = 0; b < grupy.Count; b++)
  31.                     {
  32.                         if (a != b)
  33.                         {
  34.                             var srodek1 = GetSrodekGrupy(grupy[a]);
  35.                             var srodek2 = GetSrodekGrupy(grupy[b]);
  36.  
  37.                             var odleglosc = Math.Sqrt(Math.Pow(srodek1[0] * srodek2[0], 2) + Math.Pow(srodek1[1] * srodek2[1], 2));
  38.                             odleglosci.Add(new List<int> { a, b }, odleglosc);
  39.                         }
  40.                     }
  41.                 }
  42.  
  43.                 var ktoreOut = odleglosci.OrderBy(t => t.Value).First().Key;
  44.  
  45.                 var n = ktoreOut[0];
  46.                 var m = ktoreOut[1];
  47.  
  48.                 var grupa1 = grupy[n];
  49.                 var grupa2 = grupy[m];
  50.  
  51.                 var nowaGrupa = grupa1.Concat(grupa2).ToList();
  52.                
  53.                 grupy.RemoveAt(n);
  54.                 grupy.RemoveAt(m-1);
  55.                 grupy.Add(nowaGrupa);
  56.             }
  57.  
  58.             wypisz_grupy(grupy);
  59.             return grupy;
  60.         }
  61.        
  62.         public List<double> GetSrodekGrupy(List<List<double>> grupa)
  63.         {
  64.             var sumaX = 0.0;
  65.             var sumaY = 0.0;
  66.  
  67.             for (int i = 0; i < grupa.Count; i++)
  68.             {
  69.                 sumaX += grupa[i][0];
  70.                 sumaY += grupa[i][1];
  71.             }
  72.  
  73.             return new List<double> { sumaX / grupa.Count, sumaY / grupa.Count };
  74.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement