123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using static System.Runtime.InteropServices.JavaScript.JSType;
- namespace Uncoding_Prufera
- {
- internal class Uncoding
- {
- public void Uncode_Prufer()
- {
- string path = "code_pruf.txt";
- string path_write = "graph_trees.txt";
- StreamReader sr = new StreamReader(path);
- int numbers = 0;
- while (!sr.EndOfStream) //Цикл для ввода из файла в лист
- {
- numbers = Convert.ToInt32(sr.ReadLine().Trim());
- }
- sr.Close();
- Console.WriteLine("Код Прюфера: "+numbers+"\n");
- List<int> list_code = numbers.ToString().Select(digit => int.Parse(digit.ToString())).ToList(); //Запись в лист по числам код прюфера
- List<int> list_array_num = new List<int>(); //Лист для массива чисел n+2
- List<int> list_uniq_num = new List<int>(); //Лист для записи уникальных чисел, которых нет в коде Прюфера
- List<int> list_uncode_pruf = new List<int>(); //Лист с вершинами графа по коду
- for (int i = 0; i < list_code.Count + 2; i++) //Заполнение листа чисел n+2
- {
- list_array_num.Add(i + 1);
- }
- while (list_code.Count > -1) //Основой цикл для выполнения всего алгоритма
- {
- for (int i = 0; i < list_array_num.Count; i++) //Поиск уникальных чисел, которых нет в коде Прюфера
- {
- if (list_code.IndexOf(list_array_num[i]) == -1) //Если равно -1, то число уникальное
- {
- list_uniq_num.Add(list_array_num[i]);
- }
- }
- if(list_code.Count > 0) //Выполнение алгоритма, если хоть есть одно число в коде прюфера
- {
- list_uncode_pruf.Add(list_code[0]);
- list_uncode_pruf.Add(list_uniq_num.Min());
- list_code.RemoveAt(0);
- list_array_num.RemoveAt(list_array_num.IndexOf(list_uniq_num.Min()));
- list_uniq_num.Clear();
- }
- else if(list_code.Count == 0) //Если чисел в коде Прюфера не осталось, то записываются последние 2 цифры из массива n+2
- {
- list_uncode_pruf.Add(list_array_num[0]);
- list_uncode_pruf.Add(list_array_num[1]);
- list_uniq_num.Clear();
- break;
- }
- }
- using (StreamWriter wr = new StreamWriter(path_write)) //Запись в файл
- {
- for (int i = 0; i < list_uncode_pruf.Count; i++)
- {
- i++;
- wr.WriteLine(list_uncode_pruf[i - 1] + "->" + list_uncode_pruf[i]);
- Console.WriteLine(list_uncode_pruf[i - 1] + "->" + list_uncode_pruf[i]);
- }
- }
- }
-
- }
- }
|