【发布时间】:2014-11-18 13:31:58
【问题描述】:
我写了一个小代码来查找两个二维数组的交集,不幸的是它不起作用,所以也许你可以帮助我.. 如果两个数字 (x,y) 上的两个数字都是“1”,则交集是。否则应该有“0”
void intersection(int *mat, int rows, int cols) {
int rows1 = 5, cols1 = 4; // secend matrix is in function because i just need it here
int ma2[] = { 0, 0, 1, 0, 1, // 1. Zeile
0, 0, 1, 0, 1, // 2. Zeile
0, 0, 1, 1, 0, // 3. Zeile
0, 0, 1, 0, 0 // 4. Zeile
};
int i = 0;
int j = 0;
int x = 0;
int y = 0;
while (j < cols && y < cols1) { // maybe it is better with a for loop ??
j += 1;
y += 1;
while (i < rows && x < rows1) {
i += 1;
x += 1;
if (mat[j*rows+i] == 1 && ma2[y*rows1+x] == 1) {
printf("%d ", mat[j*rows+i]);
break;
} else {
printf("%d ", mat[j*rows+i]);
break;
}
}
printf("\n");
}
}
int main (void) {
int rows = 5, cols = 4; //first matrix is in main, because i need it for other functions
int ma[] = { 0, 0, 1, 0, 0, // 1. Zeile
1, 0, 0, 0, 0, // 2. Zeile
1, 0, 1, 0, 0, // 3. Zeile
0, 0, 1, 0, 0 // 4. Zeile
};
intersection(ma, rows, cols);
return 0;
}
输出应该是(在这种情况下):
{ 0, 0, 1, 0, 0, // 1. Zeile
0, 0, 0, 0, 0, // 2. Zeile
0, 0, 1, 0, 0, // 3. Zeile
0, 0, 1, 0, 0 // 4. Zeile
};
但我只是得到一个有 1 行的矩阵
问候 ;)
【问题讨论】:
-
两个矩阵的维度相同,因此不需要 rows1 和 cols1。而且由于您将矩阵存储为一维数组,因此您可以在单个 for 循环中遍历它们(是的,使用 for 循环,因为您知道维度)。
-
但是,您的输出不正确是因为您从未在外部 while 循环中将
i和x重置为 0。
标签: c arrays matrix 2d intersection