Алгоритм Крускала. Работоспособность под вопросом
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; |         cost += l; | ||||||
| 		    res.add (make_pair (a, b)); |         res[i].addPath(a, b); | ||||||
| 		    int oldId = treeId[b],  newId = treeId[a]; |         int oldId = treeId[b - 1], newId = treeId[a]; | ||||||
| 		    for (int j=0; j<_amount; ++j){ |         for (int j = 0; j < _amount; ++j) { | ||||||
| 			    if (treeId[j] == oldId){ |           if (treeId[j] == oldId) { | ||||||
|             treeId[j] = newId; |             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