Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int array[1024][1024] = {0};
- int results[1024][1024] = {0};
- int width, height;
- int biggest = 1;
- enum dir {
- left,
- right,
- down
- };
- void findSnake(int flag, int length, enum dir lastDir, int x, int y) {
- length++;
- int newFlag = flag == 0 ? 1 : 0;
- enum dir newDir;
- if (results[x][y] >= length) {
- return;
- }
- if (length > biggest)
- biggest = length;
- if (lastDir != right) {
- int newX = x - 1;
- if (newX >= 0 && array[newX][y] != flag) {
- newDir = left;
- findSnake(newFlag, length, newDir, newX, y);
- }
- }
- if (lastDir != left) {
- int newX = x + 1;
- if (newX < width && array[newX][y] != flag) {
- newDir = right;
- findSnake(newFlag, length, newDir, newX, y);
- }
- }
- int newY = y + 1;
- if (newY < height && array[x][newY] != flag) {
- newDir = down;
- findSnake(newFlag, length, newDir, x, newY);
- }
- results[x][y] = length;
- }
- void readArray() {
- for (int i = 0; i < height; i++)
- for (int j = 0; j < width; j++)
- scanf("%d", &array[j][i]);
- }
- void showArray() {
- for (int i = 0; i < height; i++) {
- for (int j = 0; j < width; j++) {
- if (results[j][i] >= 10)
- printf("%d ", results[j][i]);
- else
- printf("%d ", results[j][i]);
- }
- putchar('\n');
- }
- }
- void checkArray() {
- for (int i = 0; i < height; i++)
- for (int j = 0; j < width; j++) {
- if (results[j][i] == 0)
- findSnake(array[j][i], 0, down, j, i);
- }
- }
- int main(void) {
- char type[2];
- scanf("%s", type);
- if (!strcmp("P1", type)) {
- scanf("%d %d", &width, &height);
- readArray();
- checkArray();
- showArray();
- printf("%d\n", biggest);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement