Как найти перекрытие в линеаризованном массиве 64x64 - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю с линеаризованным массивом 64x64.Есть горизонтальные или вертикальные линии с «цветами», установленными в качестве цветовых кодов в каждой точке массива, и я пытаюсь найти цвет, который не перекрывается.

Пример того, что я имею в виду, приведен здесь: https://imgur.com/a/geE73aK

Понятно, что в этом примере, поскольку ни один из желтых не перекрывается никакими другими цветами, цветовой код желтого цвета будетрешение.

Проверяет влево / вправо и выше / ниже текущей позиции, чтобы увидеть, является ли цвет одинаковым.Если цвет будет таким же, он продолжится.Если цвет отличается (обнаружено перекрытие AKA), код цвета будет равен нулю, и к концу программы все, кроме одного кода цвета, будут равны нулю, что облегчает поиск ненулевого значения (не перекрытие AKA)Цветовой код.

У меня сейчас есть этот код.Я застрял на том, как найти, есть ли перекрытие и сделать перекрывающийся цветовой код 0. Любая помощь будет оценена.

#include <stdio.h>
#include <stdlib.h>

#define DEBUG 1 // RESET THIS TO 0 BEFORE SUBMITTING YOUR CODE

int main(int argc, char *argv[]) {
   int               PileInts[1024];
   int               NumInts, TopColor=0;
   int  Load_Mem(char *, int *);
   // This allows you to access the pixels (individual bytes)
   // as byte array accesses (e.g., Pile[25] gives pixel 25):
   char *Pile = (char *)PileInts;

   if (argc != 2) {
     printf("usage: ./P1-1 valuefile\n");
     exit(1);
   }
   NumInts = Load_Mem(argv[1], PileInts);
   if (NumInts != 1024) {
      printf("valuefiles must contain 1024 entries\n");
      exit(1);
   }

   if (DEBUG){
     printf("Pile[0] is Pixel 0: 0x%02x\n", Pile[0]);
     printf("Pile[107] is Pixel 107: 0x%02x\n", Pile[107]);
   }

   /* Your program goes here */
  int i;
  int j;

  /*
  int black = 0;
  int pink = 1;
  int red = 2;
  int green = 3;           // all colors and their codes
  int blue = 4;
  int orange = 5;
  int yellow = 6;
  int skyblue = 7;
  */

  int rows = 63;
  int cols = 63;
  int colors[] = [1, 2, 3, 4, 5, 6, 7];    // color codes in array format
  int current = Pile[i*64 + j];            //current position in linearized 64x64 array

  for (i=1; i<63; i++){                    //run through 63 rows
    for (j=1; j<63; j++){                  //run through 63 columns

// CHECK HORIZONTAL OVERLAP
      if (current == Pile[i*64+j+1])          //check to the right current position
      if (current == Pile[i*64+j-1])          //check to the left current position



// CHECK VERTICAL OVERLAP
      if (current == Pile[(i-1)*64+j])        //check above current position
      if (current == Pile[(i+1)*64+j])        //check below current position

    }

  }          


  //CHECK FOR COLORS WHICH DID NOT OVERLAP - THAT WILL BE SOLUTION, AS THERE SHOULD ONLY BE ONE
  for (int k=0; k<8; k++){
    if colors[k] != 0 {
      TopColor = k;

    }
  }
}

Что касается запуска с 1-63, это нормально.На границах не будет цветов.

Уточнение информации о специфике: в каждой вертикали и горизонтали будет только одна линия.каждая вертикальная или горизонтальная линия будет по крайней мере одна строка / столбец от другой.Там будет ровно один цвет, который не перекрывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...