2014-11-18 4 views
-1

Я написал небольшой код, чтобы найти пересечение двух 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 ряд

здоровается;)

+0

Обе матрицы одинаковых размеров, так что вам не нужно rows1 и cols1. И поскольку вы храните матрицы как одномерные массивы, вы можете просто пропустить их в одном цикле (да, используйте цикл for, поскольку вы знаете размеры). – Evert

+0

Ваш неправильный вывод, однако, будет вызван тем, что вы никогда не сбросили 'i' и' x' в 0 во внешнем цикле. – Evert

ответ

0

попробуйте это

#define min(x,y) ((x) < (y) ? (x) : (y)) 

void intersection(int *mat, int rows, int cols) {  
    rows = min(rows, 5);//rows <--> cols 
    cols = min(cols, 4); 
    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, j; 

    for(i = 0; i < cols; ++i){ 
     for(j = 0; j < rows; ++j){ 
      //printf("%d ", mat[i*rows + j] == ma2[i*rows + j] ? mat[i*rows + j] : 0); 
      printf("%d ", mat[i*rows + j] & ma2[i*rows + j]); 
     } 
     printf("\n"); 
    } 
} 
+0

Я думаю, что он почти равен моему решению;) – WirJun

0

Я решил проблему с этим решением;) Спасибо всем за помощь мне ...

void intersection(int *mat, int rows, int cols) {  
 
//--------------------------------------------------- 
 
// erste Zusatzmatrix 
 
    int ma2[4][5] = {{0, 1, 0, 0, 0}, // 1. Zeile 
 
        {0, 1, 0, 0, 0}, // 2. Zeile 
 
        {1, 1, 0, 1, 0}, // 3. Zeile 
 
        {0, 1, 0, 0, 0}}; // 4. Zeile     
 

 
    int i = 0; 
 
    int j = 0; 
 
    int t = 1; 
 
    int s = 0; 
 
    printf("\n+++++++++++++++++++++++++++++++\nintersection\n\n"); 
 
\t 
 
    for(j = 0; j < cols; j++) { 
 
\t for (i = 0; i < rows; i++) { 
 
\t  if (ma2[j][i] && mat[j*rows+i] == 1) { 
 
\t \t printf("%d ", t); 
 
    \t  } else { 
 
\t \t printf("%d ", s); 
 
      } 
 
\t } 
 
     printf("\n"); 
 
    } 
 
}

Смежные вопросы