Алгоритм Крускала. Работоспособность под вопросом
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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user