|
@@ -0,0 +1,189 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.IO;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Windows.Forms;
|
|
|
+
|
|
|
+namespace Белман
|
|
|
+{
|
|
|
+ internal class Fileroad
|
|
|
+ {
|
|
|
+ public static string pathStart; // Путь к исходному файлу
|
|
|
+ public static string pathEnd; // Путь к конечному файлу
|
|
|
+ public void VvodNameFile()
|
|
|
+ {
|
|
|
+ char otv; // Переменная для диалога
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Console.WriteLine("После нажатия Enter, Вам необходимо указать csv файл где хранятся входные данные");
|
|
|
+ Console.ReadKey();
|
|
|
+ OpenFileDialog OD = new OpenFileDialog();
|
|
|
+ OD.DefaultExt = ".csv";
|
|
|
+ OD.Filter = "Text documents (.csv)|*.csv";
|
|
|
+ if (OD.ShowDialog() == DialogResult.OK)
|
|
|
+ {
|
|
|
+ pathStart = OD.FileName;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Console.Write("\nЖелаете повторить выбор входных данных?\nДа(Y)/Нет(N)\nОтвет: ");
|
|
|
+ otv = Convert.ToChar(Console.ReadLine());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Введены некорректные данные!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ((otv.Equals('N') || otv.Equals('N') || otv.Equals('Т') || otv.Equals('т')))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void SaveNameFile() // Определение файла для вывода результатов
|
|
|
+ {
|
|
|
+ char otv; // Переменная для диалога с пользователем
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Console.WriteLine("После нажатия Enter, Вам необходимо указать csv файл куда будет сохранён результат");
|
|
|
+ Console.ReadKey();
|
|
|
+ SaveFileDialog OD = new SaveFileDialog();
|
|
|
+ OD.DefaultExt = ".csv";
|
|
|
+ OD.Filter = "Text documents (.csv)|*.csv";
|
|
|
+ if (OD.ShowDialog() == DialogResult.OK)
|
|
|
+ {
|
|
|
+ pathEnd = OD.FileName;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Console.Write("\nЖелаете повторить выбор файла?\nДа(Y)/Нет(N)\nОтвет: ");
|
|
|
+ otv = Convert.ToChar(Console.ReadLine());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Введены некорректные данные!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ((otv.Equals('N') || otv.Equals('N') || otv.Equals('Т') || otv.Equals('т')))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public int[,] GetData() // Взятие входных данных из файла
|
|
|
+ {
|
|
|
+ var lines = File.ReadAllLines(pathStart);
|
|
|
+ string[][] text = new string[lines.Length][];
|
|
|
+ for (int i = 0; i < text.Length; i++)
|
|
|
+ {
|
|
|
+ text[i] = lines[i].Split(';');
|
|
|
+ }
|
|
|
+ int[,] road = new int[text.Length - 1, text[text.Length - 1].Length];
|
|
|
+ int k = 0;
|
|
|
+ foreach (string[] line in text)
|
|
|
+ {
|
|
|
+ int p = 0;
|
|
|
+ foreach (string s in line)
|
|
|
+ {
|
|
|
+ if (k != 0)
|
|
|
+ {
|
|
|
+ road[k - 1, p] = Convert.ToInt32(s);
|
|
|
+ }
|
|
|
+ p++;
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ return road;
|
|
|
+ }
|
|
|
+ public bool Proverka() // Проверка входных данных
|
|
|
+ {
|
|
|
+ var lines = File.ReadAllLines(pathStart);
|
|
|
+ string[][] text = new string[lines.Length][];
|
|
|
+ for (int i = 0; i < text.Length; i++)
|
|
|
+ {
|
|
|
+ text[i] = lines[i].Split(';');
|
|
|
+ }
|
|
|
+ int k = 0;
|
|
|
+ foreach (string[] line in text)
|
|
|
+ {
|
|
|
+ int p = 0;
|
|
|
+ foreach (string s in line)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (k != 0)
|
|
|
+ {
|
|
|
+ if (p == 1 && line[p] == line[p - 1])
|
|
|
+ {
|
|
|
+ Console.WriteLine("Начало и конец работы не могут совпадать!");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (p == 2 && Convert.ToInt32(s) < 0)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Продолжительность не может быть меньше 0!");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ int kolvo = 0; // Количество таких же работ
|
|
|
+ foreach (string[] line1 in text)
|
|
|
+ {
|
|
|
+ if (line1[0] == line[0] && line1[1] == line[1])
|
|
|
+ {
|
|
|
+ kolvo++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (kolvo != 1)
|
|
|
+ {
|
|
|
+ Console.WriteLine("В таблице работ не может быть одинаковых работ");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ p++;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Console.WriteLine("Во входных данных присутствуют некоректные данные, исправьте их и попробуйте снова");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ k++;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ public void OutputResult(int maxF, int[] F, string[] path)
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Результат:", Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ for (int i = 0; i < path.Length; i++)
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Путь " + (i + 1) + ";" + path[i] + ";F = ;" + F[i], Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < path.Length; i++)
|
|
|
+ {
|
|
|
+ if (maxF == F[i])
|
|
|
+ {
|
|
|
+ File.AppendAllText(pathEnd, "Кратчайший путь равен " + F[i] + " дней;", Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ File.AppendAllText(pathEnd, "Кратчайший путь:;" + path[i], Encoding.UTF8);
|
|
|
+ File.AppendAllText(pathEnd, Environment.NewLine);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|