组合题5 个小题
已作答 0 / 5
(洪水填充)
现有用字符标记像素颜色的 8×8 图像。颜色填充的操作描述如下:给定起始像素的位置待填充的颜色,将起始像素和所有可达的像素(可达的定义:经过一次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与起始像素颜色相同),替换为给定的颜色。
试补全程序。
1#include<bits/stdc++.h>2using namespace std;3 4const int ROWS = 8;5const int COLS = 8;6 7struct Point {8 int r, c;9 Point(int r, int c): r(r), c(c) {}10};11 12bool is_valid(char image[ROWS][COLS], Point pt,13 int prev_color, int new_color) {14 int r = pt.r;15 int c = pt.c;16 return (0 <= r && r < ROWS && 0 <= c && c < COLS &&17 ① && image[r][c] != new_color);18}19 20void flood_fill(char image[ROWS][COLS], Point cur, int new_color) {21 queue<Point> queue;22 queue.push(cur);23 24 int prev_color = image[cur.r][cur.c];25 ②;26 27 while (!queue.empty()) {28 Point pt = queue.front ();29 queue.pop ();30 31 Point points[4] = {③, Point(pt.r - 1, pt.c),32 Point(pt.r, pt.c + 1), Point(pt.r, pt.c - 1)};33 for (auto p : points) {34 if (is_valid(image, p, prev_color, new_color)) {35 ④;36 ⑤;37 }38 }39 }40}41 42int main() {43 char image[ROWS][COLS] = {{'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'},44 {'g', 'g', 'g', 'g', 'g', 'g', 'r', 'r'},45 {'g', 'r', 'r', 'g', 'g', 'r', 'g', 'g'},46 {'g', 'b', 'b', 'b', 'b', 'r', 'g', 'r'},47 {'g', 'g', 'g', 'b', 'b', 'r', 'g', 'r'},48 {'g', 'g', 'g', 'b', 'b', 'b', 'b', 'r'},49 {'g', 'g', 'g', 'g', 'g', 'b', 'g', 'g'},50 {'g', 'g', 'g', 'g', 'g', 'b', 'b', 'g'}};51 52 Point cur(4, 4);53 char new_color = 'y';54 55 flood_fill(image, cur, new_color);56 57 for (int r = 0; r < ROWS; r++) {58 for (int c = 0; c < COLS; c++) {59 cout << image[r][c] << '';60 }61 cout << endl;62 }63//输出:64// g g g g g g g g65// g g g g g g r r66// g r r g g r g g67// g y y y y r g r68// g g g y y r g r69// g g g y y y y r70// g g g g g y g g71// g g g g g y y g72 73 return 0;74}①处应填( )