日期:2014-05-20  浏览次数:20735 次

求一超难算法,高手请进!!!
各位高手:(放在javascript版块没有结果,实不得已)

        比如有两个表格,每个表格的大小是12   ×   16   ,即列为12,行为16。这个表格上面会被放上一个一个的div,每个div大小不等,div最小可为1×1,最大可为12×16。两张表格上面可能会有一个div,可能会放满,也可能一个都没有。现在我想把外面的div放置在这张表格的空白位置,想算出这两张表格中能放下这个div的空白位置。
  /*
      所要放置div的大小最小为1×1,最大为12×16。
      两个table左右排列。
  */
规则:
1.   如果两个table一个div都没有,则根据所给div的大小放置在左边的表格空白处。
2.   表格能够放下div的剩余空白位置必须是连续的。
3.   如果有可用的空白位置,最好能和原有的div并列放置或上下放置,即和原来div的边线紧贴着排列。

我现在做的是两个表格之间div的拖动,拖动功能已经实现了。现在想双击表格之外的div自动跑到表格中的空白位置中。

请大家多多帮忙,用java写也可以,不需要牵涉到html或者dom,希望能够给出一个完整的算法程序,感谢不尽!!!!!


------解决方案--------------------
帮顶~
------解决方案--------------------
不懂,抢个板凳先
------解决方案--------------------
这个完全是javascript编程吧
------解决方案--------------------
那个什么百万格?
------解决方案--------------------
晕死了,本来打算做个图形界面演示,才发现自己不会Swing,我就懂点SWT。。。LZ讲究看吧。。

/**
*class AutoFillDivs该类纯粹是为了演示,只有注释//used的代码才与LZ要求有关
*/
import java.io.* ;
import java.util.* ;
public class AutoFillDivs extends javax.swing.JFrame {

Table tLeft = null; //used
Table tRight =null; //used

public AutoFillDivs() {

tLeft = new Table(0,0,12,16) ; //used
tRight = new Table(20,0,12,16) ; //used
}
public static void main(String args[]){

double width ;
double height ;

boolean quitFlag = false ;
String lastLine = " " ;
BufferedReader stdin = null ;
StringBuffer sb = new StringBuffer() ;
AutoFillDivs af = new AutoFillDivs() ;

System.out.println( "请输入要自动添加的div的宽和高,用逗号分开写如: 4,6 \n输入exit来退出.输入list来列举已填充进取的DIV. ");

while (!quitFlag){

try{
stdin = new BufferedReader( new InputStreamReader(System.in));
lastLine = stdin.readLine() ;
}catch (IOException e){
e.printStackTrace();
}

if (lastLine.trim().toLowerCase().equals( "exit ".toLowerCase())) {
quitFlag = true ;
System.out.println( "再见! ");
System.exit(0);
}
if (lastLine.trim().toLowerCase().equals( "list ".toLowerCase())) {
af.listAllDivs();
}

if (lastLine.split( ", ").length==2 && !lastLine.split( ", ")[0].equals( " ") && !lastLine.split( ", ")[1].equals( " ") ){//used
width = Double.parseDouble(lastLine.split( ", ")[0]);//used
height = Double.parseDouble(lastLine.split( ", ")[1]);//used

if (width > 0.0f && height > 0.0f){//used

Div div = new Div(width , height) ;//used

if (af.tLeft.add(div)){//used
System.out.println( "新的div块已被加到左边的Table ");
}else if (af.tRight.add(div)){//used
System.out.println( "新的div块已被加到右边的Table ");