• Source
    1. #include<bits/stdc++.h>
    2. #define pii pair<int,int>
    3. #define ff first
    4. #define ss second
    5.  
    6. using namespace std;
    7.  
    8. bool color[505][505];
    9.  
    10. char arr[505][505];
    11.  
    12. int dist[505][505],m;
    13.  
    14. int x[] = {-1,+1,0,0};
    15.  
    16. int y[] = {0,0,+1,-1};
    17.  
    18. bool check(int r,int c)
    19. {
    20. if(r>=0 && r<m && c>=0 && c<m)
    21. return true;
    22.  
    23. return false;
    24. }
    25.  
    26. int bfs(pii source)
    27. {
    28. memset(color,false,sizeof color);
    29.  
    30. memset(dist,-1,sizeof dist);
    31.  
    32. color[source.ff][source.ss] = true;
    33.  
    34. dist[source.ff][source.ss] = 0;
    35.  
    36. queue<pii>Q;
    37.  
    38. Q.push(source);
    39.  
    40. while(!Q.empty())
    41. {
    42. pii now = Q.front();
    43.  
    44. Q.pop();
    45.  
    46. if(arr[now.ff][now.ss]=='3')
    47. {
    48. return dist[now.ff][now.ss];
    49. }
    50.  
    51. int i,r,c;
    52.  
    53. for(i=0; i<4; i++)
    54. {
    55. r = x[i]+now.ff;
    56.  
    57. c = y[i]+now.ss;
    58.  
    59. if(check(r,c) && !color[r][c])
    60. {
    61. color[r][c] = true;
    62.  
    63. dist[r][c] = dist[now.ff][now.ss]+1;
    64.  
    65. Q.push(make_pair(r,c));
    66. }
    67. }
    68. }
    69. }
    70.  
    71. int main()
    72. {
    73. int i,j,res;
    74.  
    75. while(scanf("%d",&m)==1)
    76. {
    77. getchar();
    78.  
    79. for(i=0; i<m; i++)
    80. {
    81. gets(arr[i]);
    82. }
    83.  
    84. res = 0;
    85.  
    86. for(i=0; i<m; i++)
    87. {
    88. for(j=0; j<m; j++)
    89. {
    90. if(arr[i][j]=='1')
    91. {
    92. res = max(res,bfs(make_pair(i,j)));
    93. }
    94. }
    95. }
    96.  
    97. printf("%d\n",res);
    98.  
    99. }
    100.  
    101. return 0;
    102. }
    103.