Graphs_dart/bin/graphs0.dart

291 lines
10 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}