種子填充其實很簡單,計算機圖形學中介紹的使用棧,感覺作者是不是腦子進水了,直接使用一個隊列用廣搜就可以了啊,但是我就懶得寫了,直接一個遞歸算了,有興趣的同學自己試一試
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
int Graph[500][500] ;
void scanline_seed_fill(int color,int sx,int sy)
{
Graph[sx][sy] = 1 ;
putpixel(sx, sy, color);
if(Graph[sx+1][sy] == 0 && sx+1 < 500)
{
Sleep(50);
scanline_seed_fill(color,sx + 1,sy);
}
if(Graph[sx-1][sy] == 0 &&sx - 1 > 0)
{
Sleep(50);
scanline_seed_fill(color,sx - 1,sy);
}
if(Graph[sx][sy+1] == 0 && sy+1 < 500)
{
Sleep(50);
scanline_seed_fill(color,sx ,sy + 1);
}
if(Graph[sx][sy-1] == 0 && sy - 1 > 0)
{
Sleep(50);
scanline_seed_fill(color,sx,sy - 1);
}
}
void Seed_fill(int startX,int startY,int color){
int driver=VGA,mode=VGAHI;
initgraph(&driver,&mode,"");
setbkcolor(0);
int x;
int y;
//畫圖形
for(x=1,y=50;x<=50 && y>=1;x++,y--)
{
putpixel(x,y,color);
Graph[x][y]=1;
}
for(x=100,y=1;x<=150 && y<=50;x++,y++)
{
putpixel(x,y,color);
Graph[x][y]=1;
}
for(x=1,y=100;x<=50 && y<=150;x++,y++)
{
putpixel(x,y,color);
Graph[x][y]=1;
}
for(x=100,y=150;x<=150 && y>=100;x++,y--)
{
putpixel(x,y,color);
Graph[x][y]=1;
}
for(x=50;x<=100;x++)
{
putpixel(x,1,color);
Graph[x][1]=1;
putpixel(x,150,color);
Graph[x][150]=1;
}
for(y=50;y<=100;y++)
{
putpixel(1,y,color);
Graph[1][y]=1;
putpixel(150,y,color);
Graph[150][y]=1;
}
getchar();
scanline_seed_fill(255,startX,startY);
getch();
}
int main()
{
initgraph(1000,1000); //初始化圖
Seed_fill(100,100,255);
getchar(); //暫停畫面
return 0;
}