我有两列,其中每个字段都有一个int
,如下所示:
1 2
2 3
4 1
5 6
我也有一个更大的网格,如:
1 1 1 1 2 2 1
1 2 3 4 2 1 1
1 3 2 3 1 3 2
1 3 6 5 6 1 3
两列让我知道我必须将每2个替换为1,每3个替换2个,每1个替换4个更大的网格,因此结果可以是
1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 5 5 5 1 1
如果我继续用第一个条目直接替换第二个表,我将无法继续第二个,因为没有更多的“2”。
我该如何解决?
如果问题不是那么清楚,我会给你这篇解释问题的文章,但没有提出任何具体的解决方案。
http://www.labbookpages.co.uk/software/imgProc/blobDetection.html#table
编辑:我有这样的输入:交换表
3 2
4 1
要更正的表
1111111111111111111111111111
1122111111111111111111113311
1122211111111111111111133311
1112221111111111111111333111
1111222111111111111113331111
1111122211111111111133311111
1111112221111111111333111111
1111111222111111113331111111
1111111122211111133311111111
1111111111222113331111111111
1111111111122222211111111111
1111111111112222111111111111
1111111111112222111111111111
1111111111122222211111111111
1111111111222442221111111111
1111111112224444222111111111
1111111122244444422211111111
1111111222444444442221111111
1111112224444444444222111111
1111122244444444444422211111
1111222444444444444442221111
1112224444444444444444222111
1122244444444444444444422211
1122444444444444444444442211
1111111111111111111111111111
(这是一个X)
在这种情况下很容易进行替换,因为除了3和1之外我没有另外的2引用,但大多数情况都是如此。 我所做的就是直接将3和2替换为3,将1替换为4。
答案 0 :(得分:1)
如您所知,您无法将变换一个接一个地应用到整个网格中。相反,您应该为每个网格单元找到正确的转换。
根据输入分配唯一值的规则称为地图。身份地图只是将每个值映射到自身;这些是你不会改变的元素。从身份地图开始,然后根据您的替换对进行调整。
这是一个基于你的第一个例子的简单程序。确保每个输入值都是map
数组中的有效索引。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int grid[4][7] = {
{1, 1, 1, 1, 2, 2, 1},
{1, 2, 3, 4, 2, 1, 1},
{1, 3, 2, 3, 1, 3, 2},
{1, 3, 6, 5, 6, 1, 3},
};
int map[10] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 // identity
};
int i, j;
map[2] = 1; // adjust map to
map[3] = 2; // replacement pairs
map[1] = 4;
map[6] = 5;
// apply mapping rule
for (j = 0; j < 4; j++) {
for (i = 0; i < 7; i++) {
grid[j][i] = map[grid[j][i]];
}
}
// print grid
for (j = 0; j < 4; j++) {
for (i = 0; i < 7; i++) {
printf("%d ", grid[j][i]);
}
puts("");
}
return 0;
}
答案 1 :(得分:0)
1-复制基质(d)。这不会被修改,只是一个辅助。
2-对于(d)中的每个单元格,将(d)[单元格]与2列第2行中的每个单元格进行比较。
2.1-在匹配时,在结果矩阵中设置(之前已重复),第一列中单元格的值位于相同(d)位置。
3-返回修改过的矩阵。
答案 2 :(得分:0)
检查依赖关系,在更换器列值&lt; 2 3 1 6&gt;中。 &lt; 1&gt; 可以很容易地改变而不是依赖。之后,您需要保存每个Integer的状态。 取数组的商店索引位置,即 if(grid == 1)然后一个[] = grid.value; if(grid == 2)则分别为两个[] = grid,value; 。 现在,更改 grid [one []] = 2;和grid [two []] = 1; 简单。