Базовые классы
This commit is contained in:
parent
3d8e0f3775
commit
93407fb312
|
@ -0,0 +1,6 @@
|
||||||
|
# Files and directories created by pub.
|
||||||
|
.dart_tool/
|
||||||
|
.packages
|
||||||
|
|
||||||
|
# Conventional directory for build output.
|
||||||
|
build/
|
|
@ -0,0 +1,3 @@
|
||||||
|
## 1.0.0
|
||||||
|
|
||||||
|
- Initial version.
|
|
@ -0,0 +1,30 @@
|
||||||
|
# This file configures the static analysis results for your project (errors,
|
||||||
|
# warnings, and lints).
|
||||||
|
#
|
||||||
|
# This enables the 'recommended' set of lints from `package:lints`.
|
||||||
|
# This set helps identify many issues that may lead to problems when running
|
||||||
|
# or consuming Dart code, and enforces writing Dart using a single, idiomatic
|
||||||
|
# style and format.
|
||||||
|
#
|
||||||
|
# If you want a smaller set of lints you can change this to specify
|
||||||
|
# 'package:lints/core.yaml'. These are just the most critical lints
|
||||||
|
# (the recommended set includes the core lints).
|
||||||
|
# The core lints are also what is used by pub.dev for scoring packages.
|
||||||
|
|
||||||
|
include: package:lints/recommended.yaml
|
||||||
|
|
||||||
|
# Uncomment the following section to specify additional rules.
|
||||||
|
|
||||||
|
# linter:
|
||||||
|
# rules:
|
||||||
|
# - camel_case_types
|
||||||
|
|
||||||
|
# analyzer:
|
||||||
|
# exclude:
|
||||||
|
# - path/to/excluded/files/**
|
||||||
|
|
||||||
|
# For more information about the core and recommended set of lints, see
|
||||||
|
# https://dart.dev/go/core-lints
|
||||||
|
|
||||||
|
# For additional information about configuring this file, see
|
||||||
|
# https://dart.dev/guides/language/analysis-options
|
|
@ -0,0 +1,17 @@
|
||||||
|
import 'src/graph.dart';
|
||||||
|
|
||||||
|
void main(List<String> arguments) {
|
||||||
|
Map<int, int> x = <int, int>{};
|
||||||
|
x[1] = 5;
|
||||||
|
x[2] = 10;
|
||||||
|
var p = Dot.fromMap("Точка 1", 1, x);
|
||||||
|
p.addPath(3, 20);
|
||||||
|
var x1 = Graphs([p], true);
|
||||||
|
x1.printG();
|
||||||
|
p.delPath(4);
|
||||||
|
x1.printG();
|
||||||
|
/*var p2 = Dot("Точка 2", 2, x);
|
||||||
|
x1.addDot(p2);
|
||||||
|
x1.printG();
|
||||||
|
x1.checkDots();*/
|
||||||
|
}
|
|
@ -0,0 +1,138 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
class Point {
|
||||||
|
int i = -1;
|
||||||
|
int length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Dot {
|
||||||
|
// ignore: prefer_final_fields
|
||||||
|
String _name = "";
|
||||||
|
int num = -1;
|
||||||
|
Map<int, int> ln = <int, int>{};
|
||||||
|
|
||||||
|
String getName() => _name;
|
||||||
|
void setName(String n) => _name = n;
|
||||||
|
bool hasConnection(int n) => ln.containsKey(n);
|
||||||
|
void addPath(int inp, int length) => ln[inp] = length;
|
||||||
|
void delPath(int n) => ln.removeWhere((key, value) => key == n);
|
||||||
|
void printD() {
|
||||||
|
stdout.write("$_name: №$num => ");
|
||||||
|
for (var i in ln.keys) {
|
||||||
|
stdout.write("$i|${ln[i]} ");
|
||||||
|
}
|
||||||
|
stdout.write("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Dot(String name, int n, List<int> num, List<int> length) {
|
||||||
|
_name = name;
|
||||||
|
Map<int, int> nw = <int, int>{};
|
||||||
|
if (num.length != length.length) {
|
||||||
|
print("Error in lists");
|
||||||
|
} else {
|
||||||
|
for (var i = 0; i <= num.length; i++) {
|
||||||
|
nw[num[i]] = length[i];
|
||||||
|
ln = nw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Привязка к памяти
|
||||||
|
Dot.fromMap(String name, int n, Map<int, int> l) {
|
||||||
|
_name = name;
|
||||||
|
num = n;
|
||||||
|
ln = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Копирование
|
||||||
|
Dot.clone(Dot a) {
|
||||||
|
_name = a._name;
|
||||||
|
num = a.num;
|
||||||
|
ln = a.ln;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Graphs {
|
||||||
|
int _amount = 0;
|
||||||
|
List<Dot> _dots = <Dot>[];
|
||||||
|
// ignore: prefer_final_fields
|
||||||
|
Map<int, String> _nameTable = <int, String>{};
|
||||||
|
bool useLength = false;
|
||||||
|
bool doubleSided = false;
|
||||||
|
|
||||||
|
Graphs(List<Dot> d, bool useL) {
|
||||||
|
_dots = d;
|
||||||
|
useLength = useL;
|
||||||
|
_amount = _dots.length;
|
||||||
|
_syncNameTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _syncNameTable() {
|
||||||
|
for (var i in _dots) {
|
||||||
|
_nameTable[i.num] = i.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _fixPathAfterInsert(Dot a) {
|
||||||
|
for (var i in a.ln.keys) {
|
||||||
|
if (!_dots[i].ln.containsKey(a.num)) _dots[i].addPath(i, a.ln[i]!);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool addDot(Dot a) {
|
||||||
|
if (getNumByName(a.getName()) != null) {
|
||||||
|
print("Dot name already in use. Change name or use addPath");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_amount++;
|
||||||
|
a.num = _amount;
|
||||||
|
_dots.add(a);
|
||||||
|
_syncNameTable();
|
||||||
|
if (doubleSided) _fixPathAfterInsert(a);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkDots() {
|
||||||
|
for (var a in _dots) {
|
||||||
|
for (var i in a.ln.keys) {
|
||||||
|
try {
|
||||||
|
if (!_dots[i].ln.containsKey(a.num)) {
|
||||||
|
print("Can't find $i");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print(
|
||||||
|
"Can't find Dot ${i + 1} for path ${a.num}->${i + 1}. Exception $e");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Getters
|
||||||
|
String? getNameByNum(int n) => _nameTable[n];
|
||||||
|
int? getNumByName(String n) {
|
||||||
|
for (var i in _nameTable.keys) {
|
||||||
|
if (_nameTable[i] == n) return i;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Print info
|
||||||
|
void printG() {
|
||||||
|
if (doubleSided) {
|
||||||
|
print("Не ориентированный");
|
||||||
|
} else {
|
||||||
|
print("Ориентированный");
|
||||||
|
}
|
||||||
|
if (useLength) {
|
||||||
|
print("Взвешенный");
|
||||||
|
} else {
|
||||||
|
print("Не взвешенный");
|
||||||
|
}
|
||||||
|
for (var i in _dots) {
|
||||||
|
i.printD();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Generated by pub
|
||||||
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
|
packages:
|
||||||
|
lints:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: lints
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
sdks:
|
||||||
|
dart: ">=2.15.0-178.0.dev <3.0.0"
|
|
@ -0,0 +1,14 @@
|
||||||
|
name: graphs0
|
||||||
|
description: A simple command-line application.
|
||||||
|
version: 1.0.0
|
||||||
|
# homepage: https://www.example.com
|
||||||
|
|
||||||
|
environment:
|
||||||
|
sdk: '>=2.15.0-178.0.dev <3.0.0'
|
||||||
|
|
||||||
|
|
||||||
|
# dependencies:
|
||||||
|
# path: ^1.8.0
|
||||||
|
|
||||||
|
dev_dependencies:
|
||||||
|
lints: ^1.0.0
|
Loading…
Reference in New Issue