Я написал небольшой код, чтобы найти пересечение двух 2d-массивов, к сожалению, он не работает, поэтому, возможно, вы можете мне помочь. Пересечение есть, если оба числа на месте (x, y) являются "1". В противном случае должно быть "0"Найти перекресток в массивах 2d
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, поскольку вы знаете размеры). – Evert
Ваш неправильный вывод, однако, будет вызван тем, что вы никогда не сбросили 'i' и' x' в 0 во внешнем цикле. – Evert