123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- using System;
- namespace Indexs
- {
- class program
- {
- static void Main(string[] args)
- {
-
- while(true)
- {
- Console.Clear();
- Console.WriteLine("Дана таблица работ для сетевого графика. Построить сетевой график и найти критический путь.");
-
- int[] ri = new int[] { 1, 1, 1, 2, 2, 3, 4 }; // начало пути
- int[] rj = new int[] { 2, 3, 5, 3, 4, 4, 5 }; // конец пути
- int[] dij = new int[ri.Length]; // объявление масива
- m1: int otv = 0;
- while (true)
- {
- Console.Write($"Введите номер способа заполнения продолжительностей работ\n1.Вручную\n2.Рандомно\nОтвет: ");
- try
- {
- otv = int.Parse(Console.ReadLine());
- break;
- }
- catch
- {
- Console.WriteLine("Введено некорректное значение! Повторите ввод");
- }
- }
- switch (otv) // выбор ручного или автоматического заполнения
- {
- case 1:
- int a = 0;
- for (int i = 0; i < dij.Length; i++)
- {
- while (true) // проверка введенного значения
- {
- Console.Write($"Ввдеите продолжительность {i + 1} работы: "); // ввод продолжительности работ
- a = Convert.ToInt32(Console.ReadLine());
- if (a > 0)
- {
- dij[i] = a;
- break;
- }
- else
- {
- Console.WriteLine($"Введено некорректное значение! Повторите ввод.");
- }
- }
- }
- break;
- case 2:
- Random rnd = new Random();
- for (int i = 0; i < dij.Length; i++) // рандомное заполнение
- {
- dij[i] = rnd.Next(1, 100);
- }
- break;
- default:
- Console.WriteLine($"Введено некорректное значение! Повторите ввод.");
- goto m1;
- break;
- }
- Console.Clear();
- Console.WriteLine($"Работы и их продолжительность:");
- for (int i = 0; i < dij.Length; i++)
- {
- Console.WriteLine($"{ri[i]}-{rj[i]}({dij[i]})"); // вывод таблицы
- }
- Console.WriteLine();
- int[,] table = new int[4, 5];
- int[][] pathes = new int[4][]; // массив из массивов (ступенчатый массив)
- pathes[0] = new int[5];
- pathes[1] = new int[6]; // пути , одна ячейка для F
- pathes[2] = new int[5];
- pathes[3] = new int[3];
- for (int i = 0; i < ri.Length; i++)
- {
- table[ri[i] - 1, rj[i] - 1] = dij[i]; // заполнение таблицы с продолжительностями в днях
- }
- pathes[0][0] = 1;
- pathes[0][1] = 2; // пути заполняются
- pathes[0][2] = 4;
- pathes[0][3] = 5;
- pathes[1][0] = 1;
- pathes[1][1] = 2;
- pathes[1][2] = 3;
- pathes[1][3] = 4;
- pathes[1][4] = 5;
- pathes[2][0] = 1;
- pathes[2][1] = 3;
- pathes[2][2] = 4;
- pathes[2][3] = 5;
- pathes[3][0] = 1;
- pathes[3][1] = 5;
- for (int j = 0; j < pathes.Length; j++) // перебирает массивы внутри массива
- {
- for (int i = 1; i < pathes[j].Length - 1; i++) // перебирает элементы конкретного массива
- {
- pathes[j][pathes[j].Length - 1] += table[pathes[j][i - 1] - 1, pathes[j][i] - 1]; // обращаемся к последнему элементу массива и плюсуем значение пути
- }
- }
- for (int j = 0; j < pathes.Length; j++)// перебират массивы внутри массива
- {
- Console.Write($"Путь {j + 1}: "); // выводит путь индекс пути
- for (int i = 0; i < pathes[j].Length - 1; i++) // последняя f его не выводим
- {
- if (i == pathes[j].Length - 2)
- {
- Console.Write($"{pathes[j][i]}");
- }
- else
- {
- Console.Write($"{pathes[j][i]}-");
- }
- }
- Console.WriteLine($"; F = {pathes[j][pathes[j].Length - 1]}"); // вывод f
- }
- int MaxF = int.MinValue; /// для поиска максимального f
- int ind = 0; // индекс максимального пути
- for (int i = 0; i < pathes.Length; i++)
- {
- if (MaxF < pathes[i][pathes[i].Length - 1])
- {
- MaxF = pathes[i][pathes[i].Length - 1];
- ind = i;
- }
- }
- Console.Write($"Критический путь - Путь {ind + 1}: ");//вывод критического пути и его индекс
- for (int i = 0; i < pathes[ind].Length - 1; i++)
- {
- if (i == pathes[ind].Length - 2)
- {
- Console.Write($"{pathes[ind][i]}");
- }
- else
- {
- Console.Write($"{pathes[ind][i]}-");
- }
- }
- Console.WriteLine($"; F = {pathes[ind][pathes[ind].Length - 1]}");
- while (true)
- {
- Console.Write($"Хотите повторить выполнение программы ? (0 - нет, любая цифра - да)");
- try
- {
- otv = int.Parse(Console.ReadLine());
- break;
- }
- catch
- {
- Console.WriteLine("Введено некорректное значение! Повторите ввод");
- }
- }
- if (otv == 0)
- {
- break;
- }
- }
- }
-
- }
- }
|