static void Main(string[] args) { //Входные данные Console.Write("I. Укажите параметры задачи \n"); Console.Write("\n Количество строк ( > 1) : "); int N = Convert.ToInt32(Console.ReadLine()); Console.Write(" Количество столбцов : "); int M = Convert.ToInt32(Console.ReadLine()); int[,] Source = new int[N, M]; // исходная матрица int[,] Mask = new int[N, M]; // матрица подсчета масок int[] Compare = new int[M]; // матрица сравнения i-строки с маской int[] Index = new int[N]; // массив индексов Console.Write($"\n Исходная матрицы ({N}x{M}) : \n"); ElementsAdd(Source, N, M); Console.Write("\nII. Результат решения задачи \n"); ClasterCompare Classter = new ClasterCompare(); Classter.Initialization(DefinL(M), N, M); int QM = Classter.CreateMask(Source, Mask, Compare); // количество масок int[,] Result = new int[N, QM]; // конечная матрица масок кодирования Console.WriteLine($" Количество масок : {QM} \n"); //Console.WriteLine(" Матрица масок : "); Print(Mask); Console.WriteLine(" Матрица кодирования строк: "); Classter.CreateResult(Source, Mask, Result, Compare); Print(Result); //Преобразование двумерного массива в одномерный для сортировки string[] Sort = new string[N]; for (int i = 0; i < N; i++) { Index[i] = i; for (int j = 0; j < QM; j++) { Sort[i] += Result[i, j].ToString(); } } //Сортировка for (int j = 0; j < N - 1; j++) { for (int i = 0; i < N - j - 1; i++) { if (Sort[i].CompareTo(Sort[i + 1]) < 0) { string tempchar = Sort[i]; Sort[i] = Sort[i + 1]; Sort[i + 1] = tempchar; int temp = Index[i]; Index[i] = Index[i + 1]; Index[i + 1] = temp; } } } //Вывод результата int QC = 1; Console.WriteLine("\n Кластеры : "); for (int i = 0; i < N; i++) { Console.Write(" A" + (Index[i] + 1)); if (i + 1 != N) { if (Sort[i] != Sort[i + 1]) { Console.Write(" | "); QC++; } else { Console.Write(", "); } } } Console.WriteLine("\n\n Количество кластеров : " + QC); Console.WriteLine("\nДля выхода нажмите клавишу ввода (ENTER)..."); Console.ReadLine(); }
public static string Get_Maski(int N_str, int M_stolb, int[,] Matrix) { int N = N_str; int M = M_stolb; int[,] Source = new int[N, M]; // исходная матрица int[,] Mask = new int[N, M]; // матрица подсчета масок int[] Compare = new int[M]; // матрица сравнения i-строки с маской int[] Index = new int[N]; // массив индексов Source = Matrix; ClasterCompare Classter = new ClasterCompare(); Classter.Initialization(DefinL(M), N, M); int QM = Classter.CreateMask(Source, Mask, Compare); // количество масок int[,] Result = new int[N, QM]; // конечная матрица масок кодирования // Console.WriteLine($" Количество масок : {QM} \n"); //Console.WriteLine(" Матрица кодирования строк: "); Classter.CreateResult(Source, Mask, Result, Compare); // Print(Result); //Преобразование двумерного массива в одномерный для сортировки string[] Sort = new string[N]; for (int i = 0; i < N; i++) { Index[i] = i; for (int j = 0; j < QM; j++) { Sort[i] += Result[i, j].ToString(); } } //Сортировка for (int j = 0; j < N - 1; j++) { for (int i = 0; i < N - j - 1; i++) { if (Sort[i].CompareTo(Sort[i + 1]) < 0) { string tempchar = Sort[i]; Sort[i] = Sort[i + 1]; Sort[i + 1] = tempchar; int temp = Index[i]; Index[i] = Index[i + 1]; Index[i + 1] = temp; } } } //Вывод результата int QC = 1; // Console.WriteLine("\n Кластеры : "); string sle = "|Первая группа|\n"; for (int i = 0; i < N; i++) { sle = sle + "\n " + (Index[i] + 1).ToString(); if (i + 1 != N) { if (Sort[i] != Sort[i + 1]) { sle = sle + " \n\n|Другая группа|\n "; QC++; } else { sle = sle + " "; } } } return(sle + " \n Количество кластеров : " + QC + "."); // Console.WriteLine("\nДля выхода нажмите клавишу ввода (ENTER)..."); // Console.ReadLine(); }