Sample Input10 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.Sample Output3
每个点与其周围的8个可以看作同一堆
算法:
1.遍历每个点,如果它没有被访问过,并且有水,则它入栈,并且标记为已访问
2.只要栈不空,依次访问栈顶元素的邻居,如果邻居有水并且没有被访问过,则邻居入栈,如果邻居都没有水,则出栈;如果栈空了,则水堆数加1
#includeusing namespace std;typedef struct { int x,y;}Point1;int main(){ int w,h; //int x,y; char c; int s[101][101]; stack sta; scanf("%d%d",&h,&w); getchar(); int i,j; for(i=0;i =0&&s[p.x-1][p.y]==1) { Point1 t; t.x=p.x-1; t.y=p.y; sta.push(t); count++; p=t; s[t.x][t.y]=2; }else if(p.x>=0&&p.x =0&&p.y =0&&p.y>=0&&p.y =0&&p.y>=0&&p.y+1 =0&&p.y-1>=0&&s[p.x-1][p.y-1]==1) { Point1 t; t.x=p.x-1; t.y=p.y-1; sta.push(t); count++; p=t; s[t.x][t.y]=2; } else if(p.x+1 =0&&s[p.x+1][p.y-1]==1) { Point1 t; t.x=p.x+1; t.y=p.y-1; sta.push(t); count++; p=t; s[t.x][t.y]=2; }else if(p.x-1>=0&&p.y+1