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;
}