Алгоритм Крускала. Работоспособность под вопросом
This commit is contained in:
parent
cec41fc63c
commit
b19011ed8b
|
@ -34,7 +34,7 @@ void main(List<String> arguments) {
|
||||||
|
|
||||||
print(x2.bfsPath(1, 3));
|
print(x2.bfsPath(1, 3));
|
||||||
*/
|
*/
|
||||||
var x1 = Graphs("Gt", false, true);
|
/*var x1 = Graphs("Gt", false, true);
|
||||||
x1.addIsolated("T1");
|
x1.addIsolated("T1");
|
||||||
x1.addIsolated("T2");
|
x1.addIsolated("T2");
|
||||||
x1.addIsolated("T3");
|
x1.addIsolated("T3");
|
||||||
|
@ -42,8 +42,13 @@ void main(List<String> arguments) {
|
||||||
x1.addPath(1, 3, 1);
|
x1.addPath(1, 3, 1);
|
||||||
x1.addPath(3, 2, 5);
|
x1.addPath(3, 2, 5);
|
||||||
x1.addPath(2, 4, 10);
|
x1.addPath(2, 4, 10);
|
||||||
x1.printG();
|
x1.printG();*/
|
||||||
print(x1.getLongestPath());
|
var x1 = Graphs.fromFile("star.txt");
|
||||||
|
for (var i in x1.getSortedPathList()) {
|
||||||
|
print("${i.l} ${i.d} ${i.p}");
|
||||||
|
}
|
||||||
|
x1.kruskal()!.printG();
|
||||||
|
//print(x1.getSortedPathList());
|
||||||
//print(x1.bfsPath(1, 4));
|
//print(x1.bfsPath(1, 4));
|
||||||
//print(x1.dfsIterative(1));
|
//print(x1.dfsIterative(1));
|
||||||
//print(x1.dijkstra(2));
|
//print(x1.dijkstra(2));
|
||||||
|
|
|
@ -432,6 +432,24 @@ class Graphs {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<LenDotPath> getSortedPathList() {
|
||||||
|
int max = -1;
|
||||||
|
int inD = -1;
|
||||||
|
int out = -1;
|
||||||
|
List<LenDotPath> result = <LenDotPath>[];
|
||||||
|
for (int i = 0; i < _amount; i++) {
|
||||||
|
var lens = _dots[i].getL();
|
||||||
|
for (var d in lens.keys) {
|
||||||
|
max = lens[d]!;
|
||||||
|
inD = i + 1;
|
||||||
|
out = d;
|
||||||
|
result.add(LenDotPath(max, inD, out));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.sort((a, b) => a.l.compareTo(b.l));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*List<Dot> getNoRepeatDots() {
|
/*List<Dot> getNoRepeatDots() {
|
||||||
List<Dot> ret = <Dot>[];
|
List<Dot> ret = <Dot>[];
|
||||||
for (int i = 0; i < _amount; i++) {
|
for (int i = 0; i < _amount; i++) {
|
||||||
|
@ -744,36 +762,45 @@ class Graphs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*Graphs? kruskal() {
|
|
||||||
int m;
|
|
||||||
List<pair<int,pair<int,int>>> g (m); // вес - вершина 1 - вершина 2
|
|
||||||
|
|
||||||
|
Graphs? kruskal() {
|
||||||
|
//List<pair<int,pair<int,int>>> g (m); // вес - вершина 1 - вершина 2
|
||||||
|
List<LenDotPath> g = getSortedPathList();
|
||||||
|
// ignore: unused_local_variable
|
||||||
int cost = 0;
|
int cost = 0;
|
||||||
List<Dot> res = <Dot>[];
|
List<Dot> res = <Dot>[];
|
||||||
for (int i = 0;i<_amount;i++){
|
for (int i = 0; i < _amount; i++) {
|
||||||
res.add(Dot(_dots[i].getName()));
|
res.add(Dot(_dots[i].getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
sort (g.begin(), g.end());
|
|
||||||
List<int> treeId = List<int>.filled(_amount, 0);
|
List<int> treeId = List<int>.filled(_amount, 0);
|
||||||
for (int i=0; i<_amount; ++i){
|
for (int i = 0; i < _amount; ++i) {
|
||||||
treeId[i] = i;
|
treeId[i] = i;
|
||||||
}
|
}
|
||||||
for (int i=0; i<_amount; ++i)
|
for (int i = 0; i < g.length; ++i) {
|
||||||
{
|
int a = g[i].d, b = g[i].p, l = g[i].l;
|
||||||
int a = g[i].second.first, b = g[i].second.second, l = g[i].first;
|
if (treeId[a - 1] != treeId[b - 1]) {
|
||||||
if (treeId[a] != treeId[b])
|
cost += l;
|
||||||
{
|
res[i].addPath(a, b);
|
||||||
cost += l;
|
int oldId = treeId[b - 1], newId = treeId[a];
|
||||||
res.add (make_pair (a, b));
|
for (int j = 0; j < _amount; ++j) {
|
||||||
int oldId = treeId[b], newId = treeId[a];
|
if (treeId[j] == oldId) {
|
||||||
for (int j=0; j<_amount; ++j){
|
treeId[j] = newId;
|
||||||
if (treeId[j] == oldId){
|
|
||||||
treeId[j] = newId;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}*/
|
return Graphs.fromList(_name, res, _useLength, _oriented);
|
||||||
|
}
|
||||||
//************Алгоритмы************
|
//************Алгоритмы************
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LenDotPath {
|
||||||
|
late int l;
|
||||||
|
late int d;
|
||||||
|
late int p;
|
||||||
|
LenDotPath(int len, dot, path) {
|
||||||
|
l = len;
|
||||||
|
d = dot;
|
||||||
|
p = path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue