fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define mp make_pair
  4. #define ALL(v) v.begin(),v.end()
  5.  
  6. vector<string> g;
  7. int dx[] = { 1, 1, 1, -1, -1, -1, 0, 0 };
  8. int dy[] = { 1, 0, -1, 1, 0, -1, 1, -1 };
  9. map<pair<int, int>, bool> vis;
  10.  
  11. int bfs(int x, int y){
  12. queue<pair<int, int> >q;
  13. int sz = 1;
  14. pair<int, int> cur;
  15. q.push(mp(x, y));
  16. vector<pair<int, int> >v;;
  17. for (; q.size(); sz = q.size()){
  18. while (sz--){
  19. cur = q.front();
  20. v.push_back(cur);
  21. q.pop();
  22. vis[cur] = true;
  23. for (int i = 0; i < 8; i++){
  24. int xx = cur.first + dx[i], yy = cur.second + dy[i];
  25. if (xx < 0 || yy < 0 || xx >= g.size() || yy >= g[0].size() || g[xx][yy] == '0' || vis[mp(xx, yy)])continue;
  26. q.push(mp(xx, yy));
  27. }
  28. }
  29. }
  30. sort(ALL(v));
  31. return unique(ALL(v)) - v.begin();
  32. }
  33.  
  34. int sol(){
  35. int c = 0;
  36. for (int i = 0; i < g.size(); i++)
  37. for (int j = 0; j < g[i].size(); j++)
  38. if (g[i][j] == '1' && !vis[mp(i, j)])
  39. c = max(c, bfs(i, j));
  40. return c;
  41. }
  42.  
  43. int main() {
  44. #ifndef ONLINE_JUDGE
  45. freopen("i.in", "r", stdin);
  46. //freopen("o.out", "w", stdout);
  47. #endif
  48. bool ok = false;
  49. int n;
  50. string s;
  51. scanf("%i\n\n", &n);
  52. while (n--){
  53. if (ok)putchar('\n');
  54. else ok = true;
  55. vis.clear();
  56. g.clear();
  57. while (getline(cin, s) && s.size())g.push_back(s);
  58. printf("%i\n", sol());
  59. }
  60. }
Success #stdin #stdout 0s 3284KB
stdin
4

11000
01100
00101
10001
01011

0001
0001
0001
0001
0001

111111

100000
010000
001000
000100
000010
000001
stdout
5

5

6

6