// 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> 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( graph.nodes.keys, (node) => graph.nodes[node] ?? [], ); print(components); }