#include #include // for ifstream #include "CPstring.h" #include "matrix.h" // file: fillplot.cc // author Dietolf Ramm; date: 11/30/96 // Fill Operation in a plot matrix const int ROWS = 30; // fixed plot size for whole program const int COLS = 76; void ReadData(Matrix & plot) // postcondition: matrix plot contains a copy of the file // which is assumed to be in pbm style without any headers { int r, c; string filename; ifstream pin; cout << "Name of file with data to plot: "; cin >> filename; pin.open(filename); for (r = 0; r < ROWS; r++) for (c = 0; c < COLS; c++) pin >> plot[r][c]; } void Fill(Matrix & plot, int r, int c, int x) // postcondition: matrix elements [r][c] and touching* // points within boundaries are set to x { if (r < 0 || r > ROWS-1 || c < 0 || c > COLS-1) return; //out of plot bounds if (plot[r][c] == 1) return; //figure boundary if (plot[r][c] == x) return; //been here before plot[r][c] = x; // fill requested point // request fill of all neighbors (and their neighbors ...) Fill(plot, r-1, c-1, x); Fill(plot, r-1, c, x); Fill(plot, r-1, c+1, x); Fill(plot, r, c-1, x); Fill(plot, r, c+1, x); Fill(plot, r+1, c-1, x); Fill(plot, r+1, c, x); Fill(plot, r+1, c+1, x); } void PrintPlot(Matrix & plot) // precondition: matrix plot contains 0's for blanks // 1's for figure boundaries, and integers > 1 for "colors" // postcondition: matrix is plotted on screen with spaces for // 0's, asterisks for 1's and lower case letters for integers // 2-27 (to represent colors) { string plotstr = " *abcdefghijklmnopqrstuvwxyz"; int r, c; cout << '+' ; for ( c = 0; c < COLS; c++) { cout << '-'; } cout << '+' << endl; for (r = 0; r < ROWS; r++) { cout << '|'; for ( c = 0; c < COLS; c++) { cout << plotstr[plot[r][c]]; } cout << '|' << endl; } cout << '+' ; for ( c = 0; c < COLS; c++) { cout << '-'; } cout << '+' << endl; } int main() { Matrix plot(ROWS, COLS); int row, col, clr; ReadData(plot); // read "image" from file PrintPlot(plot); // interactive loop to request point location an color // to fill figures in plot cout << "To Fill, Enter Row, Column, and Color: " ; cin >> row >> col >> clr; while ( row >= 0) // exits on negative row number { Fill(plot, row, col, clr); PrintPlot(plot); cout << "To Fill, Enter Row, Column, and Color: " ; cin >> row >> col >> clr; } return 0; } Sample data: redstart dr> fillplot Name of file with data to plot: FillData +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** * * | | ** ** ** ** * * | | ** ** ** ** * * * | | ** ** ** ** *** * * | | ** ** ** ** ** ** **************** | | ** ** ** ** ** ** ************** | | ** ** ** ** ** * ** *** * * | | ** *** ** ** *** ** * * * * | | ** * ** ** ** ** ** * * * ***| | ** ** ** ** ** ** ********* * * **** ****** * | | ** ** ** ** ** ** * * * * **** * | | ** ** ** ** ** ** * ***** * * * ***| | ** ** ** ** *** ** * * * ***************** * | | ** **** ** ** * ** * * * * | | ** ** ** ** ** ** * ********** * | | ** ** ** ** ** ** *** * | | ** ** ** ** *** * ********* *********************** | | ** ** ** ** * * * * * | | ** ** ** ** **** * * | | ****** ******* * * | | * * | | * *** * | | * * * * | | * * * * | | * * * * | | * * * * | | * * ** * | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: To Fill, Enter Row, Column, and Color: 15 14 3 +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** * * | | **bbb** **bb** * * | | **bbb** **bb** * * * | | **bbb** **bb** *** * * | | **bbb** **bb** ** ** **************** | | **bbb** **bb** ** ** ************** | | **bbb** **bb** ** * ** *** * * | | **bbb***bb** ** *** ** * * * * | | **bbb*bb** ** ** ** ** * * * ***| | **bbbb** ** ** ** ** ********* * * **** ****** * | | **bbbb** ** ** ** ** * * * * **** * | | **bbbbb** ** ** ** ** * ***** * * * ***| | **bb**bbb** ** *** ** * * * ***************** * | | **bb****bbb** ** * ** * * * * | | **bb** **bbb** ** ** * ********** * | | **bb** **bbb** ** ** *** * | | **bb** **bbb** *** * ********* *********************** | | **bb** **bbb** * * * * * | | **bb** **bbb** **** * * | | ****** ******* * * | | * * | | * *** * | | * * * * | | * * * * | | * * * * | | * * * * | | * * ** * | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: 18 31 8 +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** * * | | **bbb** **bb** * * | | **bbb** **bb** * * * | | **bbb** **bb** *** * * | | **bbb** **bb** **g** **************** | | **bbb** **bb** **ggg** ************** | | **bbb** **bb** **gg*gg** *** * * | | **bbb***bb** **gg***gg** * * * * | | **bbb*bb** **gg** **gg** * * * ***| | **bbbb** **gg** **gg** ********* * * **** ****** * | | **bbbb** **gg** **gg** * * * * **** * | | **bbbbb** **gg** **gg** * ***** * * * ***| | **bb**bbb** **gg***gg** * * * ***************** * | | **bb****bbb** **gg*gg** * * * * | | **bb** **bbb** **ggg** * ********** * | | **bb** **bbb** **g** *** * | | **bb** **bbb** *** * ********* *********************** | | **bb** **bbb** * * * * * | | **bb** **bbb** **** * * | | ****** ******* * * | | * * | | * *** * | | * * * * | | * * * * | | * * * * | | * * * * | | * * ** * | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: 5 45 10 +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** *iiiiiiiiiiiiii* | | **bbb** **bb** *iiiiiiiiiiiiii* | | **bbb** **bb** * *iiiiiiiiiiiiii* | | **bbb** **bb** *** *iiiiiiiiiiiiii* | | **bbb** **bb** **g** **************** | | **bbb** **bb** **ggg** ************** | | **bbb** **bb** **gg*gg** *** * * | | **bbb***bb** **gg***gg** * * * * | | **bbb*bb** **gg** **gg** * * * ***| | **bbbb** **gg** **gg** ********* * * **** ****** * | | **bbbb** **gg** **gg** * * * * **** * | | **bbbbb** **gg** **gg** * ***** * * * ***| | **bb**bbb** **gg***gg** * * * ***************** * | | **bb****bbb** **gg*gg** * * * * | | **bb** **bbb** **ggg** * ********** * | | **bb** **bbb** **g** *** * | | **bb** **bbb** *** * ********* *********************** | | **bb** **bbb** * * * * * | | **bb** **bbb** **** * * | | ****** ******* * * | | * * | | * *** * | | * * * * | | * * * * | | * * * * | | * * * * | | * * ** * | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: 18 45 15 +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** *iiiiiiiiiiiiii* | | **bbb** **bb** *iiiiiiiiiiiiii* | | **bbb** **bb** * *iiiiiiiiiiiiii* | | **bbb** **bb** *** *iiiiiiiiiiiiii* | | **bbb** **bb** **g** **************** | | **bbb** **bb** **ggg** ************** | | **bbb** **bb** **gg*gg** *** *nnnnnnnnnnnn* | | **bbb***bb** **gg***gg** *n* *nnnnnnnnnnnn* | | **bbb*bb** **gg** **gg** *n* *nnnnnnnnnnnn***| | **bbbb** **gg** **gg** ********* *n* ****nn******n*nn| | **bbbb** **gg** **gg** *nnnnnnn* *n* **** *nnnn| | **bbbbb** **gg** **gg** *nnn***** *n* *n***| | **bb**bbb** **gg***gg** *nnn* *n*****************n* | | **bb****bbb** **gg*gg** *nnn* *nnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** **ggg** *nnn**********nnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** **g** ***nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** *** *nn*********n*********************** | | **bb** **bbb** * *nn* *nnnnnnnnn* | | **bb** **bbb** **** *nnnnnnnnn* | | ****** ******* *nnnnnnnnn* | | *nnnnnnnnn* | | *nnn***nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* **nn* | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: 0 0 13 +----------------------------------------------------------------------------+ |llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll| |llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll| |llllllllllllllllllllllllllllllllllllllllllll****************llllllllllllllll| |*******lllllllllllll******llllllllllllllllll*iiiiiiiiiiiiii*llllllllllllllll| |l**bbb**lllllllllll**bb**lllllllllllllllllll*iiiiiiiiiiiiii*llllllllllllllll| |ll**bbb**lllllllll**bb**lllllll*llllllllllll*iiiiiiiiiiiiii*llllllllllllllll| |lll**bbb**lllllll**bb**lllllll***lllllllllll*iiiiiiiiiiiiii*llllllllllllllll| |llll**bbb**lllll**bb**lllllll**g**llllllllll****************llllllllllllllll| |lllll**bbb**lll**bb**lllllll**ggg**lllllllllllllllllllllllll**************ll| |llllll**bbb**l**bb**lllllll**gg*gg**lllllllllllllllll***llll*nnnnnnnnnnnn*ll| |lllllll**bbb***bb**lllllll**gg***gg**llllllllllllllll*n*llll*nnnnnnnnnnnn*ll| |llllllll**bbb*bb**lllllll**gg** **gg**lllllllllllllll*n*llll*nnnnnnnnnnnn***| |lllllllll**bbbb**lllllll**gg** **gg**l*********llll*n*llll****nn******n*nn| |lllllllll**bbbb**lllllll**gg** **gg**l*nnnnnnn*llll*n*lllllll****llll*nnnn| |lllllllll**bbbbb**lllllll**gg** **gg**ll*nnn*****llll*n*lllllllllllllll*n***| |llllllll**bb**bbb**lllllll**gg***gg**lll*nnn*llllllll*n*****************n* | |lllllll**bb****bbb**lllllll**gg*gg**llll*nnn*llllllll*nnnnnnnnnnnnnnnnnnn* | |llllll**bb**ll**bbb**lllllll**ggg**lllll*nnn**********nnnnnnnnnnnnnnnnnnn* | |lllll**bb**llll**bbb**lllllll**g**llll***nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn* | |llll**bb**llllll**bbb**lllllll***lllll*nn*********n*********************** | |lll**bb**llllllll**bbb**lllllll*llllll*nn*lllllll*nnnnnnnnn* | |ll**bb**llllllllll**bbb**lllllllllllll****lllllll*nnnnnnnnn* | |l******llllllllllll*******lllllllllllllllllllllll*nnnnnnnnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnnnnnnnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn***nnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn* *nnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn* *nnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn* *nnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn* *nnn* | |lllllllllllllllllllllllllllllllllllllllllllllllll*nnn* **nn* | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: 0 0 0 +----------------------------------------------------------------------------+ | | | | | **************** | |******* ****** *iiiiiiiiiiiiii* | | **bbb** **bb** *iiiiiiiiiiiiii* | | **bbb** **bb** * *iiiiiiiiiiiiii* | | **bbb** **bb** *** *iiiiiiiiiiiiii* | | **bbb** **bb** **g** **************** | | **bbb** **bb** **ggg** ************** | | **bbb** **bb** **gg*gg** *** *nnnnnnnnnnnn* | | **bbb***bb** **gg***gg** *n* *nnnnnnnnnnnn* | | **bbb*bb** **gg** **gg** *n* *nnnnnnnnnnnn***| | **bbbb** **gg** **gg** ********* *n* ****nn******n*nn| | **bbbb** **gg** **gg** *nnnnnnn* *n* **** *nnnn| | **bbbbb** **gg** **gg** *nnn***** *n* *n***| | **bb**bbb** **gg***gg** *nnn* *n*****************n* | | **bb****bbb** **gg*gg** *nnn* *nnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** **ggg** *nnn**********nnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** **g** ***nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn* | | **bb** **bbb** *** *nn*********n*********************** | | **bb** **bbb** * *nn* *nnnnnnnnn* | | **bb** **bbb** **** *nnnnnnnnn* | | ****** ******* *nnnnnnnnn* | | *nnnnnnnnn* | | *nnn***nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* *nnn* | | *nnn* **nn* | +----------------------------------------------------------------------------+ To Fill, Enter Row, Column, and Color: -1 -1 -1