void drawz int int stack cord2 st cord2 st push while st empty int xl

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void drawz(int x, int y){
stack<cord2> st;
cord2 a;
a.x = x;
a.y = y;
st.push(a);
while (!st.empty()){
int xl = x, xr = x;
SetPixel(x, y);
for (int xo = x - 1; xo >= 0; xo--){
if (test(xo, y)){
xl = xo + 1;
break;
}
SetPixel(xo, y);
}
for (int xo = x + 1; xo < s_width; xo++){
if (test(xo, y)){
xr = xo - 1;
break;
}
SetPixel(xo, y);
}
y++;
if (y < s_height){
for (int xo = xl; xo <= xr; xo++){
if (test(xo, y)){
continue;
}
a.y = y;
a.x = xo;
st.push(a);
for (; xo <= xr && !test(xo, y); xo++);
}
}
y -= 2;
if (y >= 0){
for (int xo = xl; xo <= xr; xo++){
if (test(xo, y)){
continue;
}
a.y = y;
a.x = xo;
st.push(a);
for (; xo <= xr && !test(xo, y); xo++);
}
}
a = st.top();
st.pop();
x = a.x;
y = a.y;
}
}