Я работаю с линеаризованным массивом 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, это нормально.На границах не будет цветов.
Уточнение информации о специфике: в каждой вертикали и горизонтали будет только одна линия.каждая вертикальная или горизонтальная линия будет по крайней мере одна строка / столбец от другой.Там будет ровно один цвет, который не перекрывается.