Hello,
i wrote a program for filling polygon.First i did it with recursive calls. But recursive calls are too bad they fill the stack memory and my compiler crashed. So then i used stack now in stack also my work is done but the memory requirement is way too high. This is a flood fill algorithm. Can anybody optimize my solution i will be very grateful to that person. The code is .
Code:#include <stdio.h> #include <graphics.h> #include <stdlib.h> struct points { int x; int y; }; struct stack { int dataX[10000]; int dataY[10000]; int top; }; void push(struct stack *s,int m,int n) { s->top++; s->dataX[s->top]=m; s->dataY[s->top]=n; } struct points pop(struct stack *s) { struct points t; t.x=s->dataX[s->top]; t.y=s->dataY[s->top]; s->top--; return t; } int main(void) { int gd=DETECT,gm,errorcode; int n=4,i; struct points w[10],t; int x=105,y=105; struct stack s; s.top=-1; initgraph(&gd,&gm,"c:\\tc\\bgi"); errorcode=graphresult(); if(errorcode!=grOk) { printf("%s",grapherrormsg(errorcode)); exit(1); } w[0].x=100; // assigning to draw square w[0].y=100; w[1].x=200; w[1].y=100; w[2].x=200; w[2].y=200; w[3].x=100; w[3].y=200; for(i=0;i<=n-2;i++) //drawing square line(w[i].x,w[i].y,w[i+1].x,w[i+1].y); line(w[0].x,w[0].y,w[n-1].x,w[n-1].y); push(&s,x,y); while(s.top!=-1) //code for flood fill { putpixel(x,y,14); if(getpixel(x,y+1)==0) push(&s,x,y+1); if(getpixel(x,y-1)==0) push(&s,x,y-1); if(getpixel(x+1,y)==0) push(&s,x+1,y); if(getpixel(x-1,y)==0) push(&s,x-1,y); delay(3); t=pop(&s); x=t.x; y=t.y; } return 0; }



LinkBack URL
About LinkBacks



