Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/simple/RandomSimpleTreeBuilder.java @ 33:c0a0fa870e6e
commit again
author | shoshi |
---|---|
date | Fri, 19 Nov 2010 15:31:42 +0900 |
parents | |
children | 9d248304be96 |
line wrap: on
line source
package treecms.proto.simple; import java.util.Random; import treecms.proto.api.Node; 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_minRow,m_minCol; private int m_maxRow,m_maxCol; private RandomSimpleTreeBuilder(int _minRow,int _minCol,int _maxRow,int _maxCol) { m_minRow = _minRow; 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); } } }