(+84) 236.3827111 ex. 402

Thuật toán tô loang


Lấy P(x,y) thuộc S, tô màu P.

Xét các điểm lân cận của P.

Nếu các điểm lân cận đó vẫn còn thuộc S và chưa được tô màu thì tô màu các điểm lân cạn đó...

Thuật toán trên có thể được minh họa bằng hàm đệ qui:

void ToLoang(int x,int y,int Color)

{

If((x,y)ÎS)&&((x,y)chưa tô))

{

putpixel(x,y,Color);

ToLoang(x+1,y,Color);

ToLoang(x-1,y,Color);

ToLoang(x,y+1,Color);

ToLoang(x,y-1,Color);

}

}

Sau đây là chương trình cài đặt thuật toán tô loang (đệ quy):

#include

#include

#include

struct ToaDo

{

int x,y;

};

int MauNen;

void NhapDaGiac(int &n,int &x,int &y,ToaDo a[])

{

cout<<"Nhap so dinh cua da giac n= "; cin>>n;

for (int i=1;i<=n;i++)

{

cout<<"Toa do dinh P["<>a[i].x;

cout<<"Toa do dinh P["<>a[i].y;

}

cout<<"Nhap diem (x,y) thuoc da giac:\n";

cout<<"nhap x="; cin>>x;

cout<<"nhap y="; cin>>y;

}

void VeDaGiac(int n,ToaDo a[],int color)

{

setcolor(color);

for (int i=1;i<=n;i++)

{

int j;

if (i==n) j=1; else j=i+1;

line(a[i].x,a[i].y,a[j].x,a[j].y);

}

}

void ToLoang(int x,int y,int color)

{

if (getpixel(x,y)==MauNen

&& x>0 && x0 && y<>

{

putpixel(x,y,color);

ToLoang(x+1,y,color);

ToLoang(x-1,y,color);

ToLoang(x,y+1,color);

ToLoang(x,y-1,color);

}

}

void main()

{

int x,y,n,Gd,Gm;

ToaDo a[10];

NhapDaGiac(n,x,y,a);

Gd=DETECT;

initgraph(&Gd,&Gm,"D:\\TC\\BGI");

VeDaGiac(n,a,15);

getch();

MauNen=getpixel(x,y);

ToLoang(x,y,10);

getch();

closegraph();

}