#include int main() { FILE *file = fopen("flowfield.in", "r"); int c, r; long steps; fscanf(file, "%d", &c); fscanf(file, "%d", &r); fscanf(file, "%ld", &steps); long stepsArray[100][100]; long pointsArray[100][100]; long currentArray[100][100]; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { fscanf(file, "%ld", &stepsArray[i][j]); pointsArray[i][j] = 1; currentArray[i][j] = 0; } } for (long i = 0; i < steps; i++) { for (int row = 0; row < r; row++) { for (int col = 0; col < c; col++) { if (pointsArray[row][col] == 0) { continue; } switch (stepsArray[row][col]) { case 0: if (row - 1 >= 0) currentArray[row - 1][col] += pointsArray[row][col]; break; case 1: if (row - 1 >= 0 && col + 1 < c) currentArray[row - 1][col + 1] += pointsArray[row][col]; break; case 2: if (col + 1 < c) currentArray[row][col + 1] += pointsArray[row][col]; break; case 3: if (row + 1 < r && col + 1 < c) currentArray[row + 1][col + 1] += pointsArray[row][col]; break; case 4: if (row + 1 < r) currentArray[row + 1][col] += pointsArray[row][col]; break; case 5: if (row + 1 < r && col - 1 >= 0) currentArray[row + 1][col - 1] += pointsArray[row][col]; break; case 6: if (col - 1 >= 0) currentArray[row][col - 1] += pointsArray[row][col]; break; case 7: if (col - 1 >= 0 && row - 1 >= 0) currentArray[row - 1][col - 1] += pointsArray[row][col]; break; } } } for (int j = 0; j < r; ++j) { for (int k = 0; k < c; ++k) { pointsArray[j][k] = currentArray[j][k]; currentArray[j][k] = 0; } } } fclose(file); FILE *outputFile = fopen("flowfield.out", "w+"); for (int row = 0; row < r; row++) { for (int col = 0; col < c; col++) { fprintf(outputFile, "%ld", pointsArray[row][col]); if (col < c - 1) { fprintf(outputFile, " "); } } if (row < r - 1) { fprintf(file, "\n"); } } fclose(outputFile); return 0; }