package Algorithms; import Model.LayeredGraphNode; import Model.LayeredNode; public class RandomGraphGenerator { private double pSubgraph; private double pEdge; private int minLayer; private int maxLayer; private int minNodePerLayer; private int maxNodePerLayer; private int maxDepth; public RandomGraphGenerator( double pSubgraph, double pEdge, int minLayer, int maxLayer, int minNodePerLayer, int maxNodePerLayer, int maxDepth ) { this.pSubgraph = pSubgraph; this.pEdge = pEdge; this.minLayer = minLayer; this.maxLayer = maxLayer; this.minNodePerLayer = minNodePerLayer; this.maxNodePerLayer = maxNodePerLayer; this.maxDepth = maxDepth; } public LayeredGraphNode createRandomNode( LayeredGraphNode parent, int depth ) { LayeredGraphNode node = new LayeredNode( null, null ); if( parent != null ) node = parent.createNode( null ); if( Math.random() <= pSubgraph && depth < maxDepth ) { int layer = (int)( Math.random() * ( maxLayer - minLayer ) ) + minLayer; for( int i = 0; i < layer; i++ ) { int knoten = (int)( Math.random() * ( maxNodePerLayer - minNodePerLayer ) ) + minNodePerLayer; for( int j = 0; j < knoten; j++ ) { LayeredGraphNode n = createRandomNode( node, depth + 1 ); n.setLayer( i ); if( i > 0 ) { for( LayeredGraphNode n2 : node.getContainedLayers().get( i - 1 ) ) { if( Math.random() <= pEdge ) node.createSimpleEdge( null, n2, n ); } } } } } return node; } }