1 #include<bits/stdc++.h>
2 #define N 11
3 using namespace std;
4 int a[N][N];
5 int vis[N][N];
6 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
7 int cnt=0;
8 struct node{
9 int x;
10 int y;
11 }q[200];
12 void bfs(int x0,int y0)
13 {
14 a[x0][y0]=1;
15 vis[x0][y0]=1;
16
17 int head=1,tail=1;
18 q[tail].x=x0;
19 q[tail].y=y0;
20 tail++;
21 while(head<tail)
22 {
23 int x=q[head].x;
24 int y=q[head].y;
25 for(int i=0;i<4;i++)
26 {
27 int nx=x+dir[i][0];
28 int ny=y+dir[i][1];
29 if(1<=nx&&nx<=10&&1<=ny&&ny<=10&&a[nx][ny]==0&&vis[nx][ny]==0)
30 {
31 vis[nx][ny]=1;
32 a[nx][ny]=1;
33 q[tail].x=nx;
34 q[tail].y=ny;
35 tail++;
36 }
37 }
38 head++;
39 }
40 }
41 void bfs_cnt(int x0,int y0)
42 {
43 vis[x0][y0]=1;
44 cnt++;
45 int head=1,tail=1;
46 q[tail].x=x0;
47 q[tail].y=y0;
48 tail++;
49 while(head<tail)
50 {
51 int x=q[head].x;
52 int y=q[head].y;
53 for(int i=0;i<4;i++)
54 {
55 int nx=x+dir[i][0];
56 int ny=y+dir[i][1];
57 if(1<=nx&&nx<=10&&1<=ny&&ny<=10&&a[nx][ny]==0&&vis[nx][ny]==0)
58 {
59 vis[nx][ny]=1;
60 q[tail].x=nx;
61 q[tail].y=ny;
62 tail++;
63 cnt++;
64 }
65 }
66 head++;
67 }
68 }
69 int main()
70 {
71 for(int i=1;i<=10;i++)
72 for(int j=1;j<=10;j++)
73 cin>>a[i][j];
74 for(int j=1;j<=10;j++)
75 if(a[1][j]==0)
76 bfs(1,j);
77 for(int j=1;j<=10;j++)
78 if(a[10][j]==0)
79 bfs(10,j);
80 for(int i=1;i<=10;i++)
81 if(a[1][i]==0)
82 bfs(1,i);
83 for(int i=1;i<=10;i++)
84 if(a[10][i]==0)
85 bfs(10,i);
86 for(int i=1;i<=10;i++)
87 for(int j=1;j<=10;j++)
88 if(a[i][j]==0&&vis[i][j]==0)
89 bfs_cnt(i,j);
90 cout<<cnt<<endl;
91 return 0;
92 }