Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/util/RandomSimpleTreeBuilder.java @ 36:9663c816e370
commit.
author | suika6039 |
---|---|
date | Mon, 27 Dec 2010 21:08:43 +0900 |
parents | src/treecms/proto/simple/RandomSimpleTreeBuilder.java@9d248304be96 |
children |
line wrap: on
line source
package treecms.proto.util; import java.util.Random; import treecms.proto.api.Node; import treecms.proto.simple.SimpleNode; public class RandomSimpleTreeBuilder { public static void main(String _args[]) { SimpleNode root = RandomSimpleTreeBuilder.randomTree(2,2,3,3); print(0,root); } public static void print(int _indent,Node _parent) { for(int i = 0;i < _indent;i ++){ System.out.print("\t"); } System.out.println(_parent.getTitle()); for(Node child : _parent.getChildren()){ print(_indent + 1,child); } } public static SimpleNode randomTree(int _maxRow,int _maxCol) { return randomTree(0,0,_maxRow,_maxCol); } public static SimpleNode randomTree(int _minRow,int _minCol,int _maxRow,int _maxCol) { RandomSimpleTreeBuilder builder = new RandomSimpleTreeBuilder(_minRow,_minCol,_maxRow,_maxCol); return builder.generate(); } private int m_minCol; private int m_maxRow,m_maxCol; private RandomSimpleTreeBuilder(int _minRow,int _minCol,int _maxRow,int _maxCol) { m_minCol = _minCol; m_maxRow = _maxRow; m_maxCol = _maxCol; } public SimpleNode generate() { SimpleNode root = new SimpleNode(); root.setTitle("root"); Random rand = new Random(); int childs = m_minCol + rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); for(int i = 1;i < childs;i ++){ SimpleNode child = (SimpleNode)root.addChild(new SimpleNode()); child.setTitle("c"+i); generate(child,1,rand); } return root; } private void generate(SimpleNode _parent,int _row,Random _rand) { if(_row >= m_maxRow || _rand.nextInt(m_maxRow) == 0){ return; } int childs = m_minCol + _rand.nextInt(m_maxCol)*(1 - m_minCol/(1 + m_maxCol)); for(int i = 1;i < childs;i ++){ SimpleNode child = (SimpleNode)_parent.addChild(new SimpleNode()); child.setTitle(_parent.getTitle()+i); generate(child,_row + 1,_rand); } } }