此时对´1´进行8联填充,目的是把一个完整图形元素做访问标记,这样再遇到该图形元素就不会重复计数
再返回,继续对背景4联填充。
原先用floodfill给封闭的图的边涂色,再深搜 看有多少个不同的连通图 结果wrong了
#include "stdio.h"
#define M 1005
char map[M][M];
int dx0[] = {-1,0,1,0};
int dy0[] = {0,-1,0,1};
int dx[] = {-1,-1,0,1,1,1,0,-1};
int dy[] = {0,-1,-1,-1,0,1,1,1};
struct node
{
x,y;
}visit[1000000],find[1000000];
void floodfill (int x,int y,int n,int m);
void DFS (int x,int y,int n,int m);
int main ()
{
n,m,n0,m0,i,j,count = 0;
%d",&n0,&m0);
n0+2;
m0+2;
();
<= n0;i ++)
(map[i]+1);
<= n0+1;i ++)
<= m0+1;j ++)
(i==0||i==n0+1||j==0||j==m0+1)
//给图加边框,从0,0开始搜,如果不加框,当
//0,0是1的话,就会忽视其它的元素
'0';
floodfill(0,0,n,m);
< n;i ++)
< m;j ++)
if (map[i][j] == '2')
{
count
++;
//有多少个不同的颜色的子图
DFS (i,j,n,m);
}
("There are %d shape elements\n",count);
0;
}
void floodfill (int x,int y,int n,int
m)
{
top,rear,i,x0,y0;
-1;
0;
find[++rear].x = x;
= y;
<= rear)
x0 = find[top].x;
y0 = find[top++].y;
if (map[x0][y0] == '0')
map[x0][y0] = '#';
for (i = 0;i < 4;i ++)
{
x = x0+dx0[i];
y = y0+dy0[i];