原文
import std;
struct point { int x, y; }
void show_grid(char[][] grid) {
foreach (ref row ; grid)
writeln(row);
writeln;
}
void animated_fill(char[][] grid, point[] starting_points) {
auto height = grid.length;
if (height == 0)
return;
auto width = grid[0].length;
struct xpoint { int x, y, dist_from_start; }
auto queue = uninitializedArray!(xpoint[])(width * height);
size_t start, end;
foreach (p ; starting_points) {
if (grid[p.y][p.x] == '.') {
queue[end++] = xpoint(p.x, p.y, 0);
grid[p.y][p.x] = '#';
}
}
int current_dist = -1;
while (start < end) {
auto p = queue[start++];
if (p.dist_from_start > current_dist) {
show_grid(grid);
current_dist = p.dist_from_start;
}
if (p.y + 1 < height && grid[p.y + 1][p.x] == '.') {
queue[end++] = xpoint(p.x, p.y + 1, p.dist_from_start + 1);
grid[p.y + 1][p.x] = '#';
}
if (p.y - 1 >= 0 && grid[p.y - 1][p.x] == '.') {
queue[end++] = xpoint(p.x, p.y - 1, p.dist_from_start + 1);
grid[p.y - 1][p.x] = '#';
}
if (p.x + 1 < width && grid[p.y][p.x + 1] == '.') {
queue[end++] = xpoint(p.x + 1, p.y, p.dist_from_start + 1);
grid[p.y][p.x + 1] = '#';
}
if (p.x - 1 >= 0 && grid[p.y][p.x - 1] == '.') {
queue[end++] = xpoint(p.x - 1, p.y, p.dist_from_start + 1);
grid[p.y][p.x - 1] = '#';
}
}
}
void main() {
auto grid = ["....@.....".dup,
"....@@@@..".dup,
"..........".dup];
auto height = grid.length.to!int;
auto width = grid[0].length.to!int;
const number_of_starting_points = 2;
auto random_points = new point[](number_of_starting_points);
foreach (ref p ; random_points)
p = point(uniform(0, width), uniform(0, height));
animated_fill(grid, random_points);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现