#define clr(a,x) memset(a,x,sizeof a)
char a[100][100]; //需要填充的数组a
pair<int, int> que[maxn]; //存储当前的点在数组中的坐标
bool used[100][100]; //存储当前的点是否已经被用过
int n; //第一数组a的大小为n*n;
void print() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << ' ';
}
cout << endl;
}
}
void solve(int x,int y) {
clr(a, '*');
clr(used, 0);
int sum1 = 0;
int sum2 = 1;
int head = 0;
int tail = 0;
que[tail++] = make_pair(x, y);
used[x][y] = true;
pair<int, int> p;
while (head != tail) {
if (sum1 == sum2*sum2) {
sum2 += 2;
system("cls");
print();
Sleep(100);
}
if (head >= maxn) head == 0;
p = que[head++];
a[p.first][p.second] = 'O';
sum1++;
for (int i = - 1; i <= 1; i++)
for (int j = - 1; j <= 1; j++) {
int dx = p.first + i;
int dy = p.second + j;
if (dx >= 0 && dx < n &&dy >= 0 && dy < n&&used[dx][dy] == false) {
used[dx][dy] = true;
if (tail >= maxn) tail = 0;
que[tail++] = make_pair(dx, dy);
}
}
}
}
种子填充(floodfill)
最新推荐文章于 2024-08-15 16:46:15 发布