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 <conio.h>
#include <graphics.h>
#include <iostream.h>
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["<<i<<"].x= "; cin>>a[i].x;
cout<<"Toa do dinh P["<<i<<"].y= "; cin>>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 && x<getmaxx() && y>0 && y<getmaxy())
{
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();
}
» Tin mới nhất:
» Các tin khác: