Am I not following proper ettiquette here?
I'm looking for help on this problem.
Moderator: Board moderators
I 5 6
L 2 3 A
S one.bmp
G 2 3 J
F 3 3 J
F 3 3 J
V 2 3 4 W
H 3 4 2 Z
S two.bmp
X
#include<stdio.h>
#include<string.h>
int dir[4][2] = {{-1,0}, {0,1}, {1,0}, {0,-1}};
int M,N,top;
char canvas[250+2][250+2];
typedef struct _p { int x, y; } Px;
Px stack[250*250];
#define push(x) ( stack[++top]=x )
#define pop() ( stack[top--] )
typedef enum {
Clear = 'C',
Fill = 'F',
HDrow = 'H',
New = 'I',
RDrow = 'K',
PDrow = 'L',
Save = 'S',
VDrow = 'V',
Exit = 'X'
} CMD;
void fill(int x, int y, char c, char rc);
int
main()
{
char input[32];
char *ptr, c;
int i,j,x1,x2,y1,y2,tmp;
while(1) {
gets(input);
ptr=&input[2];
switch(input[0]) {
case New:
sscanf(ptr,"%d %d",&M,&N);
case Clear:
for(i=1;i<=N;i++) {
for(j=1;j<=M;j++) {
canvas[i][j] = 'O';
if(j==M)
canvas[i][j+1]='\0';
}
}
break;
case PDrow:
sscanf(ptr,"%d %d %c", &x1,&y1,&c);
if(x1<1||x1>M || y1<1||y2>N) break;
canvas[y1][x1]=c;
break;
case HDrow:
sscanf(ptr,"%d %d %d %c",&x1,&x2,&y1,&c);
if(x1>x2) { tmp = x1; x1 = x2; x2 = tmp; }
if(x1<1||x2>M || y1<1||y1>N) break;
for(i=x1;i<=x2;i++)
canvas[y1][i]=c;
break;
case VDrow:
sscanf(ptr,"%d %d %d %c",&x1,&y1,&y2,&c);
if(y1>y2) { tmp = y1; y1 = y2; y2 = y1; }
if(x1<1||x1>M || y1<1||y2>N) break;
for(i=y1;i<=y2;i++)
canvas[i][x1]=c;
break;
case RDrow:
sscanf(ptr,"%d %d %d %d %c",&x1,&y1,&x2,&y2,&c);
if(x1>x2) { tmp = x1; x1 = x2; x2 = tmp; }
if(y1>y2) { tmp = y1; y1 = y2; y2 = tmp; }
if(x1<1||x2>M || y1<1||y2>N) break;
for(i=x1;i<=x2;i++)
for(j=y1;j<=y2;j++)
canvas[j][i]=c;
break;
case Fill:
sscanf(ptr,"%d %d %c",&x1,&y1,&c);
if(x1<1||x1>M || y1<1||y1>N ||
canvas[y1][x1]==c) break;
fill(x1,y1,c,canvas[y1][x1]);
break;
case Save:
printf("%s\n",ptr);
for(i=1;i<=N;i++)
printf("%s\n",&canvas[i][1]);
break;
case Exit:
return 1;
default:
break;
}
}
return 1;
}
void
fill(int x, int y, char c, char rc)
{
Px px,newpx;
int i,tx,ty;
px.x=x, px.y=y;
canvas[y][x]=c;
push(px);
while(top>0) {
px=pop();
for(i=0;i<4;i++) {
tx=px.x+dir[i][0];
ty=px.y+dir[i][1];
if(canvas[ty][tx]==rc) {
canvas[ty][tx]=c;
newpx.x=tx;
newpx.y=ty;
push(newpx);
}
}
}
return;
}
Solved
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <cstring>
using namespace std;
void fillRegion(int x, int y, char R,char C, char a[][250],bool val[][250],int m,int n){
if(val[x-1][y]&&a[x-1][y]==R&&a[x-1][y]!=C&&x-1>=0&&x-1<=m&&y>=0&&y<=n){
a[x-1][y]=C;
val[x-1][y]=false;
fillRegion(x-1,y,R,C,a,val,m,n);
}
if(val[x][y-1]&&a[x][y-1]==R&&a[x][y-1]!=C&&x>=0&&x<=m&&y-1>=0&&y-1<=n){
a[x][y-1]=C;
val[x][y-1]=false;
fillRegion(x,y-1,R,C,a,val,m,n);
}
if(val[x+1][y]&&a[x+1][y]==R&&a[x+1][y]!=C&&x+1>=0&&x+1<=m&&y>=0&&y<=n){
a[x+1][y]=C;
val[x+1][y]=false;
fillRegion(x+1,y,R,C,a,val,m,n);
}
if(val[x][y+1]&&a[x][y+1]==R&&a[x][y+1]!=C&&x>=0&&x<=m&&y+1>=0&&y+1<=n){
a[x][y+1]=C;
val[x][y+1]=false;
fillRegion(x,y+1,R,C,a,val,m,n);
}
}
int main(){
//freopen("input.in","r",stdin);
//freopen("output.out","w",stdout);
char X,c;
int m, n, x1, x2, y1, y2, x, y;
char a[250][250];
char name[12];
while(cin >> X && X!='X'){
if(X=='I'){
cin >> n >> m;
for(int i=0;i<250;i++){
for(int j=0;j<250;j++){
a[i][j]='O';
}
}
}
else if(X=='C'){
for(int i=0;i<250;i++){
for(int j=0;j<250;j++){
a[i][j]='O';
}
}
}
else if(X=='L'){
cin >> y >> x >> c;
a[x-1][y-1]=c;
}
else if(X=='V'){
cin >> x >> y1 >> y2 >> c;
for(int j=y1-1;j<y2;j++){
a[j][x-1]=c;
}
}
else if(X=='H'){
cin >> x1 >> x2 >> y >> c;
for(int j=x1-1;j<x2;j++){
a[y-1][j]=c;
}
}
else if(X=='K'){
cin >> y1 >> x1 >> y2 >> x2 >> c;
if(x2>m) x2=m;
if(y2>n) y2=n;
for(int i=x1-1;i<x2;i++){
for(int j=y1-1;j<y2;j++){
a[i][j]=c;
}
}
}
else if(X=='F'){
cin >> y >> x >> c;
char R = a[x-1][y-1];
bool val[250][250];
for(int i=0;i<250;i++){
for(int j=0;j<250;j++){
val[i][j]=true;
}
}
if(R!=c && y<=n && x<=m)
fillRegion(x-1,y-1,R,c,a,val,m-1,n-1);
}
else if(X=='S'){
cin >> name;
cout << name << endl;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cout << a[i][j];
}
cout << endl;
}
}
else{
char buff[100];
cin.getline(buff,100);
}
}
}#include <stdio.h>
#define MAX 252
char canvas[MAX][MAX];
int m, n;
void create() {
int i, j;
scanf("%d %d", &m, &n);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
canvas[i][j] = 'O';
}
}
return;
}
void color() {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
canvas[i][j] = 'O';
}
}
return;
}
void line() {
int x, y;
char c;
scanf("%d %d %c", &x, &y, &c);
canvas[y - 1][x - 1] = c;
return;
}
void vline() {
int x, y1, y2;
char c;
int i;
int a, b;
scanf("%d %d %d %c", &x, &y1, &y2, &c);
a = y1 > y2 ? y2 : y1;
b = y1 > y2 ? y1 : y2;
for (i = a; i <= b; i++) {
canvas[i - 1][x - 1] = c;
}
return;
}
void hline() {
int x1, x2, y;
char c;
int i;
int a, b;
scanf("%d %d %d %c", &x1, &x2, &y, &c);
a = x1 > x2 ? x2 : x1;
b = x1 > x2 ? x1 : x2;
for (i = a; i <= b; i++) {
canvas[y - 1][i - 1] = c;
}
return;
}
void rectangle() {
int x1, x2, y1, y2;
char c;
int i, j;
scanf("%d %d %d %d %c", &x1, &y1, &x2, &y2, &c);
for (i = x1; i <= x2; i++) {
for (j = y1; j <= y2; j++) {
canvas[j - 1][i - 1] = c;
}
}
return;
}
void fillrec(int x, int y, int oc, int c) {
canvas[x - 1][y - 1] = c;
if (x > 1) {
if (canvas[x - 2][y - 1] == oc) {
fillrec(x - 1, y, oc, c);
}
}
if (y > 1) {
if (canvas[x - 1][y - 2] == oc) {
fillrec(x, y - 1, oc, c);
}
}
if (x < n) {
if (canvas[x][y - 1] == oc) {
fillrec(x + 1, y, oc, c);
}
}
if (y < m) {
if (canvas[x - 1][y] == oc) {
fillrec(x, y + 1, oc, c);
}
}
return;
}
void fill() {
int x, y, oc;
char c;
scanf("%d %d %c", &x, &y, &c);
oc = canvas[x - 1][y - 1];
if (oc == c)
return;
fillrec(x, y, oc, c);
return;
}
void name() {
char fname[12];
int i, j;
scanf("%s", fname);
printf("%s\n", fname);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("%c", canvas[i][j]);
}
printf("\n");
}
return;
}
int main() {
char k;
while ((k = getchar()) != 'X') {
switch (k) {
case 'I':
create();
break;
case 'C':
color();
break;
case 'L':
line();
break;
case 'V':
vline();
break;
case 'H':
hline();
break;
case 'K':
rectangle();
break;
case 'F':
fill();
break;
case 'S':
name();
break;
default:
while (getchar() != '\n');
}
}
return 0;
}
#include <stdio.h>
typedef struct point_{
int x;
int y;
int visited;
}point;
char image[256][256];
void swap(int * p, int * q){
int tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
void I(int m, int n){
int X,Y;
for(Y=1;Y<=n;Y++){
for(X=1;X<=m;X++)
image[Y][X]='O';
}
}
void C(int m, int n){
int X,Y;
for(Y=1;Y<=n;Y++){
for(X=1;X<=m;X++)
image[Y][X]='O';
}
}
void L(int m, int n, int x, int y, char c){
if(x<=m && y<=n && c<=90){
image[y][x]=c;
}
}
void V(int m, int n,int x, int y1, int y2, char c){
int Y;
if(x<=m && y1<=n && y2<=n && c<=90){
if(y2<y1)
swap(&y1,&y2);
for(Y=y1;Y<=y2;Y++)
image[Y][x]=c;
}
}
void H(int m, int n,int x1, int x2, int y,char c){
int X;
if(x1<=m && x2<=m && y<=n && c<=90){
if(x2<x1)
swap(&x1,&x2);
for(X=x1;X<=x2;X++)
image[y][X]=c;
}
}
void K(int m, int n,int x1, int y1, int x2, int y2 ,char c ){
int X,Y;
if(x1<=m && x2>=1&& y1<=n && y2<=n && c<=90){
if(y2<y1)
swap(&y1,&y2);
if(x2<x1)
swap(&x1,&x2);
for(Y=y1;Y<=y2;Y++){
for(X=x1;X<=x2;X++)
image[Y][X]=c;
}
}
}
void F(int m, int n, char c_atual, int x_, int y_,char c){
point points[62505];
int p;
int actual_p;
int X, Y;
int x, y;
for(X=0;X<600;X++){
points[X].visited=0;
}
p=0;
actual_p=0;
x=x_;
y=y_;
image[y][x]=c;
points[p].x=x;
points[p].y=y;
p++;
while(actual_p<=p){
x = points[actual_p].x;
y = points[actual_p].y;
if(!points[actual_p].visited){
for(X=x+1; X<=m && image[y][X]==c_atual ;X++){
image[y][X]= c;
points[p].x = X;
points[p].y= y;
p++;
}
for(X=x-1; X>=1 && image[y][X]==c_atual ; X--){
image[y][X]= c;
points[p].x = X;
points[p].y= y;
p++;
}
for(Y=y-1;Y>=1 && image[Y][x]==c_atual ; Y--){
image[Y][x]= c;
points[p].x = x;
points[p].y = Y;
p++;
}
for(Y=y+1;Y<=n && image[Y][x]==c_atual;Y++){
image[Y][x]= c;
points[p].x = x;
points[p].y = Y;
p++;
}
points[actual_p].visited = 1;
}
actual_p++;
}
}
void S(int m, int n, char *name){
int X,Y;
printf("%s\n", name);
for(Y=1;Y<=n;Y++){
for(X=1;X<=m;X++)
printf("%c",image[Y][X]);
printf("\n");
}
}
int main(){
char command;
char name[16];
int m, n;
int x, y, x1, x2, y1, y2;
char c;
while(1){
scanf("%c", &command);
if(command =='X')
break;
switch(command){
case 'I':
scanf("%d %d", &m, &n);
I(m,n);
break;
case 'C':
C(m,n);
break;
case 'L':
scanf("%d %d %c\n",&x, &y, &c);
L(m,n,x,y,c);
break;
case 'V':
scanf("%d %d %d %c\n", &x, &y1, &y2, &c);
V(m,n,x, y1, y2,c);
break;
case 'H':
scanf("%d %d %d %c\n", &x1, &x2, &y, &c);
H(m,n,x1,x2,y,c);
break;
case 'K':
scanf("%d %d %d %d %c\n", &x1,&y1,&x2,&y2,&c);
K(m,n,x1,y1,x2,y2,c);
break;
case 'F':
scanf("%d %d %c\n", &x,&y,&c);
F(m,n,image[y][x],x,y,c);
break;
case 'S':
scanf("%s",name);
S(m,n,name);
break;
}
}
return 0;
}
Users browsing this forum: No registered users and 1 guest