Graphs_dart/bin/graphs0.dart

291 lines
10 KiB
Dart
Raw Normal View History

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<String> arguments) {
Map<int, int> x = {1: 10, 2: 11};
var p = Dot.fromMap("Т1", x);
p.printD();
x = <int, int>{};
x[1] = 11;
var p2 = Dot.fromMap("Т2", x);
p2.printD();
x = <int, int>{};
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> graphs = <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<Dot> list = <Dot>[];
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 = <Dot>[];
for (int i = 0; i < n; i++) {
stdout.write("Имя вершины: ");
String dotName = getStrLine();
stdout.write(
"Ввод: *куда*|*вес* через пробел. Если граф не взвешенный, то *вес* можно не указывать.\nВершина №${i + 1}. Смежна с: ");
str = getStrLine();
List<int> inn = <int>[];
List<int> len = <int>[];
while (str != "" && str != " ") {
List<String> 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<graf>::iterator i = grafs.begin();
for (int j = 0; j < x; j++) {
i++;}
grafs.erase(i);*/
} else {
print("Не найден граф с таким номером");
}
break;
}
case 3:
{
// добавить вершину
List<int> inn = <int>[];
List<int> len = <int>[];
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<String> 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;
}
}
}