我有一个类似于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]
]
----------------
| | |
| |-----------|
| | | |
| | |-----|
| | | |
| |-----------|
| | | | | |
----------------
不是“可折叠的”
执行此转换或保留表格的有效算法是什么?任何编程语言都可以。
假设结构有效(不丢失单元格,表格为矩形),如果它简化了任务
答案 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 ----------------
将单元格坐标转换回范围。