| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:graphs/graphs.dart'; |
| |
| /// A representation of a directed graph. |
| /// |
| /// Data is stored on the [Node] class. |
| class Graph { |
| final Map<Node, List<Node>> nodes; |
| |
| Graph(this.nodes); |
| } |
| |
| class Node { |
| final String id; |
| final int data; |
| |
| Node(this.id, this.data); |
| |
| @override |
| bool operator ==(Object other) => other is Node && other.id == id; |
| |
| @override |
| int get hashCode => id.hashCode; |
| |
| @override |
| String toString() => '<$id -> $data>'; |
| } |
| |
| void main() { |
| final nodeA = Node('A', 1); |
| final nodeB = Node('B', 2); |
| final nodeC = Node('C', 3); |
| final nodeD = Node('D', 4); |
| final graph = Graph({ |
| nodeA: [nodeB, nodeC], |
| nodeB: [nodeC, nodeD], |
| nodeC: [nodeB, nodeD], |
| }); |
| |
| final components = stronglyConnectedComponents<Node>( |
| graph.nodes.keys, |
| (node) => graph.nodes[node] ?? [], |
| ); |
| |
| print(components); |
| } |