import 'src/graph.dart'; import 'dart:convert'; import 'dart:io'; int getIntLine() => int.parse(stdin.readLineSync(encoding: utf8)!); String getStrLine() => stdin.readLineSync(encoding: utf8)!; void main(List arguments) { Map x = {1: 10, 2: 11}; var p = Dot.fromMap("Т1", x); p.printD(); x = {}; x[1] = 11; var p2 = Dot.fromMap("Т2", x); p2.printD(); x = {}; var x1 = Graphs.fromList("Граф 1", [p, p2], true, false); x1.addDot(p); x1.addDotFromToLists("T3", [1, 2], [10, 20]); x1.addIsolated("T4"); x1.checkDots(true); x1.printG(); print(x1.addPath(4, 1, 10)); x1.printG(); x1.printToFile("outTest.txt"); var x2 = Graphs.fromFile("outTest.txt"); x2.printG(); x2.delPath(1, 4); x2.printG(); x2.delDot(1); x2.printG(); x2.delDot(2); x2.printG(); x2.addPath(1, 2, 11); x2.printG(); int deistvie = 1; List graphs = []; String name; String str = ""; Separators sep = Separators(); while (deistvie != 0) { stdout.write( "1 - создать граф, 2 - удалить граф, 3 - добавить в граф вершину,\n4 - удалить вершину, 5 - добавить ребро/дугу, 6 - удалить ребро/дугу,\n7 - вывести граф на экран, 8 - вывести граф в файл, 0 - выход\nDeistvie: "); deistvie = getIntLine(); switch (deistvie) { case 1: { // создать граф print("1 - ввести из файла, 2 - ввести вручную\nDeistvie: "); int d = getIntLine(); List list = []; switch (d) { case 1: { // из файла stdout.write("Имя файла: "); name = getStrLine(); graphs.add(Graphs.fromFile(name)); graphs.last.printG(); break; } case 2: { // с консоли stdout.write("Имя графа: "); name = getStrLine(); stdout.write( "Граф: 1 - ориентированный, 2 - не ориентированный: "); bool isOriented; String x = getStrLine(); if (x == "1") { isOriented = true; } else { isOriented = false; } stdout.write("Граф: 1 - взвешенный, 2 - не взвешенный: "); bool hasLength; x = getStrLine(); if (x == "1") { hasLength = true; } else { hasLength = false; } stdout.write("Количество вершин: "); int n = getIntLine(); list = []; for (int i = 0; i < n; i++) { stdout.write("Имя вершины: "); String dotName = getStrLine(); stdout.write( "Ввод: *куда*|*вес* через пробел. Если граф не взвешенный, то *вес* можно не указывать.\nВершина №${i + 1}. Смежна с: "); str = getStrLine(); List inn = []; List len = []; while (str != "" && str != " ") { List a = str.split(sep.space); for (var splitted in a) { var dt = splitted.split(sep.dotToLength); if (dt.length == 2) { inn.add(int.parse(dt[0])); len.add(int.parse(dt[1])); } } list.add(Dot.fromTwoLists(dotName, inn, len)); } Graphs newG = Graphs.fromList(name, list, hasLength, isOriented); newG.printG(); graphs.add(newG); break; } } } break; } case 2: { // удалить граф int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Удалить граф с номером: "); int x = getIntLine(); if (x >= 0 && x < num) { /* vector::iterator i = grafs.begin(); for (int j = 0; j < x; j++) { i++;} grafs.erase(i);*/ } else { print("Не найден граф с таким номером"); } break; } case 3: { // добавить вершину List inn = []; List len = []; stdout.write( "Ввод: *куда*|*вес* через пробел. Если граф не взвешенный, то в *вес* ставить 0: "); String x = getStrLine(); while (x != "" && x != " ") { String a = x.substring(0, x.indexOf(sep.dotToLength)); if (x.contains(sep.dotToLength)) { x = x.substring(x.indexOf(" ") + 1, x.length); } else { x = ""; } if (a.contains(sep.dotToLength)) { inn.add(int.parse((a.substring(0, a.indexOf(sep.dotToLength))))); len.add(int.parse( a.substring(a.indexOf(sep.dotToLength) + 1, a.length))); } else { inn.add(int.parse(a)); len.add(0); } } int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Вставка в графа с номером: "); int y = getIntLine(); if (y >= 0 && y < num) { graphs[y].addDotFromToLists("0", inn, len); } else { print("Не найден граф с таким номером"); } graphs[y].printG(); break; } case 4: { // удалить вершину int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: "); int y = getIntLine(); graphs[y].printG(); if (y >= 0 && y < num) { num = graphs[y].getDotAmount(); stdout.write("Количество вершин: $num. Вершина для удаления: "); int x = getIntLine(); if (x >= 0 && x < num) { graphs[y].delDot(x); } else { print("Не найдены вершины в графе\n"); } } else { print("Не найден граф с таким номером"); } break; } case 5: { // добавить ребро/дугу int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Вставка в граф с номером: "); int y = getIntLine(); graphs[y].printG(); if (y >= 0 && y < num) { num = graphs[y].getDotAmount(); stdout.write("Количество вершин: $num. Вершина куда вствляется: "); int x1 = getIntLine(); stdout.write("Вершина, которую вставляют: "); int x2 = getIntLine(); stdout.write("Вес ребра, вствить 0 если граф не взвешенный: "); int w = getIntLine(); if (x1 >= 0 && x1 < num && x2 >= 0 && x2 < num) { graphs[y].addPath(x1, x2, w); } else { print("Не найдены вершины в графе\n"); } } else { print("Не найден граф с таким номером"); } break; } case 6: { // удалить ребро/дугу int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Удаление из графа с номером: "); int y = getIntLine(); graphs[y].printG(); int x1, x2; if (y >= 0 && y < num) { num = graphs[y].getDotAmount(); stdout.write( "Количество вершин: $num. Введите через пробел номера вершин между которыми удалить ребро: "); List x = getStrLine().split(sep.space); x1 = int.parse(x[0]); x2 = int.parse(x[1]); if (x1 >= 0 && x1 < num && x2 >= 0 && x2 < num) { graphs[y].delPath(x1, x2); } else { print("Не найдены вершины в графе\n"); } } else { print("Не найден граф с таким номером"); } break; } case 7: // вывод в консоль { int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: "); int x = getIntLine(); if (x >= 0 && x < num) { graphs[x].printG(); } else { print("Не найден граф с таким номером"); } break; } case 8: { // вывод в файл int num = graphs.length; stdout.write( "Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: "); int x = getIntLine(); stdout.write("В файл: "); String out = getStrLine(); if (x >= 0 && x < num) { graphs[x].printToFile(out); } else { print("Не найден граф с таким номером"); } break; } case 0: exit(0); default: print("Действие не распознано"); break; } } }