博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动找位置
阅读量:5764 次
发布时间:2019-06-18

本文共 5921 字,大约阅读时间需要 19 分钟。

hot3.png

static int HomeCols = 4;	static List
 listRows = new ArrayList
(); private static  void setNodeRowCol(BaseNode node, int row, int col){ node.setRowNum(row); node.setColNum(col); for(int cellRow = row; cellRow < row + node.getRows(); cellRow ++){ for(int cellCol = col; cellCol < col + node.getCols(); cellCol ++){ listRows.get(cellRow)[cellCol] = 1; } } } /**  *   * @param node  * @param fromRow  * @param fromCol  * @return  */ private static  boolean hasEmptyPosition(BaseNode node, int fromRow, int fromCol){ if(fromCol + node.getCols() > HomeCols || fromRow + node.getRows() > listRows.size()){ return false; } for(int i = fromRow; i < fromRow + node.getRows() ; i ++){ for(int j = fromCol; j < fromCol + node.getCols() ; j ++){ if(listRows.get(i)[j] == 1){ return false; } } } return true; } private static int[] getNodePlace(BaseNode node, int row, int col){ //如果没有足够位置,则先生成位置。 if(listRows.size() < row + node.getRows()){ listRows.add(new int[HomeCols]); } boolean hasPos = false; int[] xx; System.err.println("row:"+node.getRowNum()  + "   col"+node.getColNum()  +"   "+ row +" >>>"+ col); //从当前行循环到最后一个起始行(listRows.size() - node.getRows()) for(int nodeRow = row ; nodeRow <= listRows.size() - node.getRows(); nodeRow ++){ //从当前列循环到最后一个起始列(HomeCols - node.getCols()) for(int nodeCol = col ; nodeCol <= HomeCols - node.getCols(); nodeCol ++){ //如果当前行列被占用,则从当前行下一列开始重新搜索 //如果是最后一列,则从下一行第一列开始重新搜索 if(listRows.get(nodeRow)[nodeCol] == 1){ if(col + 1 == HomeCols){ xx = getNodePlace(node, row + 1, 0); }else{ xx = getNodePlace(node, row, col + 1); } if(xx[0] >= 0){ return xx; } }else{ //如果当前行列为空闲,则搜索该行列开始的node所覆盖的行列是否全部为空闲 hasPos = hasEmptyPosition(node, nodeRow, nodeCol); //如果以当前行列为起始位置,存在可用的空闲区域,则退出,搜索成功 if(hasPos){ break; }else{ //如果以当前行列为起始位置,不存在可用的空闲区域 //如果不是最后一列,则从当前行下一列开始重新搜索 //如果是最后一列,则从下一行第一列开始重新搜索 if(col + 1 == HomeCols){ xx = getNodePlace(node, row + 1, 0); }else{ xx = getNodePlace(node, row, col + 1); } if(xx[0] >= 0){ return xx; } } } } if(hasPos){ break; }else{ if(col + 1 == HomeCols){ xx = getNodePlace(node, row + 1, 0); }else{ xx = getNodePlace(node, row, col + 1); } if(xx[0] >= 0){ return xx; } } }  node.setRowNum(row); node.setColNum(col); setNodeRowCol(node, row, col); return new int[]{row, col}; }

测试代码:

BaseNode node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		int[] xxx = getNodePlace(node, 0 , 0);		System.err.println("should 0,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 0,2   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());						node = new BaseNode();		node.setRows(1);		node.setCols(4);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 1,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 2,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 2,2   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(4);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 3,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());		node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 4,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());						node = new BaseNode();		node.setRows(2);		node.setCols(4);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 5,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(4);		printlistRows();		xxx = getNodePlace(node, 0 , 0);		System.err.println("should 7,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());		node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 4,2   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		 		System.err.println("should 8,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());		node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 8,2   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 9,0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(2);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 9,2   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());				node = new BaseNode();		node.setRows(1);		node.setCols(2);		printlistRows();		 xxx = getNodePlace(node, 0 , 0);		System.err.println("should 10, 0   -------------------------   "+node.getRowNum()  + ","  +node.getColNum());

转载于:https://my.oschina.net/fanhoucheng/blog/311704

你可能感兴趣的文章
微信小程序之wx.navigateback往回携带参数
查看>>
陌陌和请吃饭之类的应用,你要是能玩转,那就厉害了
查看>>
递归的运行机制简单理解
查看>>
汉字转阿斯克马值
查看>>
Java 栈与堆简介
查看>>
【supervisord】部署单进程服务的利器
查看>>
zabbix oracle监控插件orabbix部署安装
查看>>
python3 通过qq 服务器 发送邮件
查看>>
部署Replica Sets及查看相关配置
查看>>
倒序显示数组(从右往左)
查看>>
文献综述二:UML技术在行业资源平台系统建模中的应用
查看>>
Swift 学习 用 swift 调用 oc
查看>>
第三章 Python 的容器: 列表、元组、字典与集合
查看>>
微信小程序开发 -- 点击右上角实现转发功能
查看>>
[转载]ASP.NET MVC Music Store教程(1):概述和新项目
查看>>
js函数大全
查看>>
Mongodb启动命令mongod参数说明
查看>>
TCP&UDP压力测试工具
查看>>
Android 最简单的自定义Dialog之一
查看>>
磨刀不误砍柴 - 配置适合工作学习的桌面环境
查看>>