UVa 10267

来源:互联网 发布:linux下创建用户 编辑:程序博客网 时间:2024/06/07 21:34

題目:編輯圖像的二維數組,存在題目中的跟中操作(存在非法操作,直接跳過不處理);

分析:圖論、搜索。直接模擬處理即可,這裡用floodfill處理K操作,注意dfs可能會暴棧。

說明:注意坐標可能不是升序的,所以要先交換。

#include <stdio.h>#include <stdlib.h>char bmp[256][256];char name[1000];void floodfill(int n, int m, int y, int x, char s, char t){if (y < 1 || y > n || x < 1 || x > m || bmp[y][x] != s) {return;}bmp[y][x] = t;floodfill(n, m, y, x+1, s, t);floodfill(n, m, y, x-1, s, t);floodfill(n, m, y+1, x, s, t);floodfill(n, m, y-1, x, s, t);}void swap(int &a, int &b){int c = a;a = b;b = c;}int main(){char buf[100], color[100];int  row = 0, column = 0, X, Y, X1, Y1, X2, Y2;while (scanf("%s", &buf) && buf[0] != 'X') {if (buf[0] == 'I' || buf[0] == 'C') {if (buf[0] == 'I') {scanf("%d%d", &column, &row);}for (int i = 1; i <= row; ++ i) {for (int j = 1; j <= column; ++ j) {bmp[i][j] = 'O';}}}else if (buf[0] == 'L') {scanf("%d%d%s", &X, &Y, color);bmp[Y][X] = color[0];}else if (buf[0] == 'V') {scanf("%d%d%d%s", &X, &Y1, &Y2, color);if (Y1 > Y2) {swap(Y1, Y2);}for (int i = Y1; i <= Y2; ++ i) {bmp[i][X] = color[0];}}else if (buf[0] == 'H') {scanf("%d%d%d%s", &X1, &X2, &Y, color);if (X1 > X2) {swap(X1, X2);}for (int i = X1; i <= X2; ++ i) {bmp[Y][i] = color[0];}}else if (buf[0] == 'K') {scanf("%d%d%d%d%s", &X1, &Y1, &X2, &Y2, color);if (Y1 > Y2) {swap(Y1, Y2);}if (X1 > X2) {swap(X1, X2);}for (int i = Y1; i <= Y2; ++ i) {for (int j = X1; j <= X2; ++ j) {bmp[i][j] = color[0];}}}else if (buf[0] == 'F') {scanf("%d%d%s", &X, &Y, color);if (bmp[Y][X] != color[0]) {floodfill(row, column, Y, X, bmp[Y][X], color[0]);}}else if (buf[0] == 'S') {scanf("%s", name);puts(name);for (int i = 1; i <= row; ++ i) {for (int j = 1; j <= column; ++ j) {printf("%c",bmp[i][j]);}puts("");}}}return 0;}


0 0
原创粉丝点击