Raizekas

Untitled

Dec 13th, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.28 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. using System.IO;
  7.  
  8. namespace deme
  9. {
  10.     class Simbolis
  11.     {
  12.         public char x { get; private set; }
  13.  
  14.         public Simbolis()
  15.         {
  16.             x = ' ';
  17.         }
  18.  
  19.         // Priskiria klasės kintamiesiems reikšmes.
  20.         public Simbolis(char xx)
  21.         {
  22.             x = xx;
  23.         }
  24.  
  25.         public override string ToString()
  26.         {
  27.             string eilute;
  28.             eilute = string.Format("{0, 4}", x);
  29.             return eilute;
  30.         }
  31.         // Palyginimo operatorius.
  32.  
  33.         public static bool operator ==(Simbolis pirmas, char antras)
  34.         {
  35.             return pirmas.x == antras;
  36.         }
  37.  
  38.         public static bool operator !=(Simbolis pirmas, char antras)
  39.         {
  40.             return pirmas.x != antras;
  41.         }
  42.         public override bool Equals(object obj)
  43.         {
  44.             Simbolis Item = obj as Simbolis;
  45.             return Item.x == this.x;
  46.         }
  47.         public override int GetHashCode()
  48.         {
  49.             return base.GetHashCode();
  50.         }
  51.  
  52.         //------------------------------------------------------------
  53.     }
  54.     class Plotai
  55.     {
  56.         const int EilSk = 20;
  57.         const int StSk = 70;
  58.            
  59.         private Simbolis[,] Komp;
  60.         public int nn { get; set; } // eilučių skaičius
  61.         public int mm { get; set; } // stulpelių skaičius
  62.         public Plotai()
  63.         {
  64.             nn = 0;
  65.             mm = 0;
  66.             Komp = new Simbolis[EilSk, StSk];
  67.         }
  68.         //----------------------------------------------------------------
  69.         public void Dėti(int i, int j, Simbolis r)
  70.         {
  71.             Komp[i, j] = r;
  72.         }
  73.         //---------------------------------------------------------------
  74.         public Simbolis Imti(int i, int j)
  75.         {
  76.             return Komp[i, j];
  77.         }
  78.  
  79.         //------------------------------------------------------------
  80.         public void PakeistiSimboli(int nr, int nr1, Simbolis mok) { Komp[nr,nr1] = mok; }
  81.         //------------------------------------------------------------
  82.         public void RikiuotiMin()
  83.         {
  84.             Simbolis mok = new Simbolis('*');
  85.             Random Rand=new Random();
  86.             for (int i = 0; i < nn*mm/3; i++)
  87.             {
  88.                 int ii = Rand.Next(0,nn);
  89.                 int jj = Rand.Next(0, mm);
  90.                 if (Imti(ii, jj) != mok)
  91.                     PakeistiSimboli(ii, jj, mok);
  92.                 else
  93.                     i--;
  94.             }
  95.         }
  96.     }
  97.            
  98.     class Program
  99.     {              
  100.         static void Main(string[] args)
  101.         {                
  102.             const string CFr = "..\\..\\Rezultatai.txt";
  103.             if (File.Exists(CFr))
  104.                 File.Delete(CFr);
  105.  
  106.             Plotai sodas = new Plotai();
  107.             int  ilgiausiosDemesIlgis=0;
  108.             int k=0;
  109.             int kk=0;
  110.             Skaityti(sodas);
  111.            
  112.             Spausdinti(CFr, sodas, "Pradiniai");
  113.             sodas.RikiuotiMin(); // random generatorius
  114.             Spausdinti(CFr, sodas, "Pakeista");
  115.             SkaiciuojaSimbolius(sodas);
  116.             ArLangeliaiNuspalvinti(sodas, out ilgiausiosDemesIlgis,out  k,out  kk);
  117.             Console.WriteLine("{0} : {1} ,{2}",ilgiausiosDemesIlgis,k,kk);
  118.         }
  119.         //-----------------------------------------------------------------------
  120.         static void Skaityti(Plotai sodas)
  121.         {
  122.                 sodas.nn = int.Parse(Console.ReadLine());
  123.                 sodas.mm = int.Parse(Console.ReadLine());
  124.                 for (int i = 0; i < sodas.nn; i++)
  125.                 {
  126.                     for (int j = 0; j < sodas.mm; j++)
  127.                     {
  128.                         char a1 = '.';
  129.  
  130.                         Simbolis ob = new Simbolis(a1);
  131.                         sodas.Dėti(i, j, ob);                          
  132.                 }                        
  133.             }
  134.         }
  135.         //------------------------------------------------------------
  136.         //Spausdina konteinerio duomenis faile lentele.
  137.         //------------------------------------------------------------
  138.         static void Spausdinti(string fv, Plotai sodas, string antraštė)
  139.         {
  140.             string bruksnys = new string('-', 42);
  141.             using (var fr = File.AppendText(fv))
  142.             {
  143.                 fr.WriteLine(antraštė);
  144.                 Console.WriteLine(antraštė);
  145.                 fr.WriteLine(bruksnys);
  146.                 Console.WriteLine(bruksnys);
  147.                 for (int i = 0; i < sodas.nn; i++)
  148.                 {
  149.                     for (int j = 0; j < sodas.mm; j++)
  150.                     {
  151.                         fr.Write("{0}", sodas.Imti(i, j).ToString());
  152.                         Console.Write("{0}", sodas.Imti(i, j).ToString());
  153.                     }
  154.                     fr.WriteLine();
  155.                     Console.WriteLine();
  156.                 }
  157.                 fr.WriteLine(bruksnys);
  158.                 Console.WriteLine(bruksnys);
  159.             }
  160.         }
  161.         //------------------------------------------------------------
  162.         static void SkaiciuojaSimbolius( Plotai sodas)
  163.         {
  164.             int [,] plotas=new int [100,100];
  165.             int[] plotai = new int[100];
  166.             int kiek = 0;
  167.             //int kiek1 = 0;
  168.                  
  169.             for (int i = 0; i < sodas.nn; i++)
  170.             {
  171.                 kiek = 0;
  172.                 for (int j = 0; j < sodas.mm; j++)
  173.                 {
  174.                     if (sodas.Imti(i, j) == '*'
  175.                         || sodas.Imti(i, j) == '*' && j != sodas.mm && sodas.Imti(i, j + 1) == '*'
  176.                         || sodas.Imti(i, j) == '*' && j != sodas.nn && sodas.Imti(i + 1, j) == '*'
  177.                         || sodas.Imti(i, j) == '*' && j != sodas.mm && j != sodas.nn && sodas.Imti(i + 1, j + 1) == '*')
  178.                     {
  179.                         kiek++;
  180.                         plotas[i, kiek] = j;
  181.                     }
  182.                 }
  183.                 plotas[i, 0] = kiek;
  184.             }
  185.             for (int i = 0; i < sodas.nn; i++)
  186.             {
  187.                 // int kiekl = 0;
  188.                 for (int j = 1; j <= plotas[i, 0]; j++)
  189.                     Console.Write("  {0}", plotas[i, j]);
  190.                 Console.WriteLine();
  191.                
  192.             }                
  193.         }
  194.         //Jeigu langelis, kurio koordinatės i ir j yra nuspalintas ir jeigu i ir j nėra lygu x ir y:Jeigu
  195.         // tas langelis jau nėra pridėtas į šitą dėmę:
  196.         //Pridėti langelį į tikrinamųLangelių list'ą
  197.         static void Patikrinti(Plotai sodas, int x, int y, ref List<List<int>> tikrinamasTaskas)
  198.         {        
  199.             for (int i = x-1; i <= x+1; i++)
  200.             {
  201.                 for(int j=y-1; j<=y+1; j++)
  202.                 {
  203.                     if (i >= 0 && j >= 0 && i < sodas.nn && j < sodas.mm)
  204.                     {
  205.              //           Console.Write(sodas.Imti(i, j));
  206.                         if (sodas.Imti(i, j) == '*' && !(i == x && j == y))
  207.                         {
  208.              //               Console.Write(" [" + i + ";" + j + "] ");
  209.                             bool arYraTaskas = false;
  210.                             List<int> sublistas = new List<int>();
  211.                             for (int k = 0; k < tikrinamasTaskas.Count; k++)
  212.                             {
  213.                                 if (tikrinamasTaskas[k][0] == i && tikrinamasTaskas[k][1] == j)
  214.  
  215.                                     arYraTaskas = true;
  216.                             }
  217.                             if (!arYraTaskas)
  218.                             {
  219.                                 sublistas.Add(i);
  220.                                 sublistas.Add(j);
  221.                                 tikrinamasTaskas.Add(sublistas);
  222.                             }
  223.                         }
  224.                     }
  225.                 }
  226.             }
  227.         }
  228.         static void ArLangeliaiNuspalvinti(Plotai sodas, out int ilgiausiosDemesIlgis,out int k,out int kk)
  229.         {
  230.              ilgiausiosDemesIlgis = 0;
  231.              k = 0; kk = 0;
  232.             for (int i=0; i<sodas.nn; i++)    // eini per kiekvieną langelį; i - "ciklo kintamasis"
  233.             {
  234.                
  235.                 for(int j=0; j<sodas.mm; j++)
  236.                 {
  237.                     List<List<int>> tikrinamiLangeliai = new List<List<int>>();
  238.                     List<int> sublist = new List<int>();
  239.                         // tikrinamiLangeliai - šiuo metu tikrinamų langelių sąrašas
  240.                     if (sodas.Imti(i, j) == '*')
  241.                     {
  242.                         sublist.Add(i);
  243.                         sublist.Add(j);
  244.  
  245.                         tikrinamiLangeliai.Add(sublist);
  246.                     }      // kad kai einam per visus langelius, bent tą langelį (jei jis nuspalvintas), ant kurio dabar "užėjom" patikrintų
  247.                         for (int jj=0; jj<tikrinamiLangeliai.Count; jj++)       // eiti per visus langelius, kuriuos reikės tikrint (pastabaa: tikrinant langelius, gali atsirasti dar naujų tikrinamiLangeliai, . ciklo kintamasis j
  248.                         {
  249.                             Patikrinti(sodas, tikrinamiLangeliai[jj][0], tikrinamiLangeliai[jj][1], ref tikrinamiLangeliai);
  250.         //                    Console.Write("s ");
  251.        
  252.                                 // Jeigu tikrinamasis langelis turėjo kokių langelių, kurie tiko, juos reikės pridėti prie tikrinamiLangeliai list'o (greičiausiai tai implementuoti geriausia Patikrinti methode (nebūtinai))
  253.                         }
  254.                     Console.WriteLine();
  255.                     Console.WriteLine("kazkas " + tikrinamiLangeliai.Count());
  256.                        if (tikrinamiLangeliai.Count > ilgiausiosDemesIlgis)
  257.                         {
  258.                             k = i;
  259.                             kk = j;
  260.                             ilgiausiosDemesIlgis = tikrinamiLangeliai.Count;
  261.                         }
  262.                         //Jei didžiausia dėmė: atsiminti dėmės ilgį, atsiminti visilangeliai[i] vietą (kadangi reikia bent vieną dėmės tašką išvesti)
  263.                     }
  264.              }
  265.         }
  266.     }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment