Rowspan“清理”算法

时间:2015-07-03 06:00:03

标签: algorithm html-table

我有一个类似于HTML表格的colspan / rowspan功能的结构:

[
 [1,4], [4,1]
 [2,2], [2,2]
 [1,1], [1,1], [1,1], [1,1]
]

就像

<tr>
  <td rowspan=4></td>
  <td colspan=4></td>
</tr>
<tr>
  <td rowspan=2 colspan=2></td>
  <td colspan=2 rowspan=2></td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td></td>
  <td></td>
</tr>

----------------
|  |           |
|  |-----------|
|  |     |     |
|  |-----------|
|  |  |  |  |  |
----------------

中的第二行(以及第一行的第一个单元格,跨越所有4行)
[
 [1,3], [4,1]
 [2,1], [2,1]
 [1,1], [1,1], [1,1], [1,1]
]
该表的

和“拓扑”保持不变

然而像

这样的表
[
 [1,4], [4,1]
 [2,2], [2,1]
 [2,1],
 [1,1], [1,1], [1,1], [1,1]
]

----------------
|  |           |
|  |-----------|
|  |     |     |
|  |     |-----|
|  |     |     |
|  |-----------|
|  |  |  |  |  |
----------------

不是“可折叠的”

执行此转换或保留表格的有效算法是什么?任何编程语言都可以。

假设结构有效(不丢失单元格,表格为矩形),如果它简化了任务

1 个答案:

答案 0 :(得分:2)

将单元格范围转换为坐标。

  0  1  2  3  4  5
0 ----------------
  |  |           |
1 |  |-----------|
  |  |     |     |
  |  |     |     |
  |  |     |     |
3 |  |-----------|
  |  |  |  |  |  |
4 ----------------

计算y坐标的排序集(0, 1, 3, 4)。将每个坐标映射到集合中的索引(0: 0, 1: 1, 3: 2, 4: 3)。

计算有序的x坐标集(0, 1, 2, 3, 4, 5)。将每个坐标映射到集合中的索引(标识图)。

  0  1  2  3  4  5
0 ----------------
  |  |           |
1 |  |-----------|
  |  |     |     |
  |  |     |     |
  |  |     |     |
2 |  |-----------|
  |  |  |  |  |  |
3 ----------------

将单元格坐标转换回范围。