blob: 47aca6177d34d58d0f1cb5929f90ef732c5ba897 [file] [log] [blame]
// 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() {
var nodeA = Node('A', 1);
var nodeB = Node('B', 2);
var nodeC = Node('C', 3);
var nodeD = Node('D', 4);
var graph = Graph({
nodeA: [nodeB, nodeC],
nodeB: [nodeC, nodeD],
nodeC: [nodeB, nodeD]
});
var components = stronglyConnectedComponents<Node>(
graph.nodes.keys, (node) => graph.nodes[node]);
print(components);
}