|
PROG
|
(C)
#include <stdio.h>
#include <stdlib.h>
#define GRIDSIZE 20
void Recur(int level, int maxlevel, int rgBd[][GRIDSIZE], int i, int j, int rgCt[]) {
if (i < 0 || j < 0 || i >= GRIDSIZE || j >= GRIDSIZE || level >= maxlevel || j > i || rgBd[i][j] != 0) return;
rgCt[level] += 1;
rgBd[i][j] = 1;
Recur(level + 1, maxlevel, rgBd, i + 1, j, rgCt);
Recur(level + 1, maxlevel, rgBd, i - 1, j, rgCt);
Recur(level + 1, maxlevel, rgBd, i, j + 1, rgCt);
Recur(level + 1, maxlevel, rgBd, i, j - 1, rgCt);
rgBd[i][j] = 0;
}
int main(int argc, char **argv) {
int rgBd[GRIDSIZE][GRIDSIZE] = {0};
int rgCt[GRIDSIZE] = {0};
int maxlevel = GRIDSIZE;
if (argc > 1) {
maxlevel = atoi(argv[1]);
if (maxlevel < 0 || maxlevel > GRIDSIZE) {
printf("Bad argument");
return 0;
}
}
Recur(0, maxlevel, rgBd, 0, 0, rgCt);
for (int i = 0; i < maxlevel; i++) printf("%2d ", rgCt[i]);
return 0;
}
|