Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #define MAX 256
- void
- print(int *grid, int w, int h, int t, int s, int d)
- {
- fputs("\x1b[H",stdout); // cursor to "home"
- printf("t = %ds\n", t);
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- int i = y * w + x;
- if (i == s)
- fputs("\x1b[93;1m",stdout);
- else if (i == d)
- fputs("\x1b[94;1m",stdout);
- printf("%-5.1f", grid[i] / (float)(w * h));
- if (i == s || i == d)
- fputs("\x1b[0m",stdout);
- }
- putchar('\n');
- }
- }
- static void
- fill(int *grid, int w, int h, int i, char *visited)
- {
- static const int d[] = {
- +1, +0, -1, +0, +0, +1, +0, -1, +1, +1, +1, -1, -1, +1, -1, -1,
- };
- int x = i % w;
- int y = i / w;
- visited[i] = 1;
- grid[i]++;
- for (int j = 0; j < 8; j++) {
- int tx = x + d[j * 2 + 0];
- int ty = y + d[j * 2 + 1];
- int ti = ty * w + tx;
- if (tx >= 0 && tx < w && ty >= 0 && ty < h && !visited[ti]) {
- if (grid[i] > grid[ti]) {
- grid[i]--;
- fill(grid, w, h, ti, visited);
- break;
- }
- }
- }
- }
- int
- main(void)
- {
- int w, h, dst;
- int grid[MAX];
- scanf("%d%d", &w, &h);
- for (int i = 0; i < w * h; i++)
- scanf("%d", grid + i);
- scanf("%d", &dst);
- int soff = 0;
- int doff = 0;
- int dval = (dst + 1) * w * h;
- for (int i = 0; i < w * h; i++) {
- if (grid[i] == 1)
- soff = i;
- if (grid[i] == dst)
- doff = i;
- grid[i] *= w * h;
- }
- int t = 0;
- fputs("\e[2J",stdout); // clear terminal
- print(grid,w,h,0,soff,doff);usleep(250000);
- for (; grid[doff] < dval; t++) {
- for (int i = 0; i < w * h; i++) {
- char visited[MAX] = {0};
- fill(grid, w, h, soff, visited);
- }
- print(grid,w,h,t+1,soff,doff);
- usleep(250000);
- }
- printf("%d\n", t);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement