fork download
  1. #include <stdio.h>
  2. int grid[101][101];
  3. int visited[101][101];
  4. int front,rear;
  5. int num,numEdge,i;
  6. int pos[4][2] = {{0,-1},{-1,0},{0,1},{1,0}};
  7. struct p{
  8. int u;
  9. int v;
  10. } Q[10000];
  11. //struct p Q[10000];
  12. void initQueue(){
  13. front = rear = -1;
  14. }
  15. int isEmpty(){
  16. return front == rear;
  17. }
  18.  
  19. void enQueue(int x, int y){
  20. rear++;
  21. Q[rear].u = x;
  22. Q[rear].v = y;
  23. }
  24.  
  25. struct p deQueue(){
  26. struct p temp = {-1,-1};
  27. if(!isEmpty()){
  28. front++;
  29. return Q[front];
  30. }
  31. return temp;
  32. }
  33.  
  34. int bfs(int x,int y){
  35. enQueue(x,y);
  36. int max = 1;
  37. visited[x][y] = 1;
  38. while(!isEmpty()){
  39. struct p point = deQueue();
  40. int tx,ty,t;
  41. for(t=0;t<4;t++){
  42. tx = point.u + pos[t][0];
  43. ty= point.v + pos[t][1];
  44. if(tx>= 0 && tx <= num && ty >=0 && ty <=num && !visited[tx][ty] && grid[tx][ty]){
  45. printf("Check %d %d\n",tx,ty);
  46. enQueue(tx,ty);
  47. max++;
  48. visited[tx][ty] = 1;
  49.  
  50. }
  51. }
  52.  
  53.  
  54. }
  55. return max;
  56. }
  57.  
  58. int main(){
  59. freopen("input.txt","r",stdin);
  60. int cnt = 0;
  61. int maxx = 0;
  62. int j;
  63. initQueue();
  64. scanf("%d",&num);
  65. for(i=1;i<=num;i++){
  66. for(j=1;j<=num;j++){
  67. grid[i][j] = 0;
  68. visited[i][j] = 0;
  69. }
  70. }
  71. for(i=1;i<=num;i++){
  72. for(j=1;j<=num;j++){
  73. scanf("%d",&grid[i][j]);
  74. }
  75. }
  76. // for(i = 0;i<numEdge;i++){
  77. // int x,y; scanf("%d %d",&x,&y);
  78. // grid[x][y] = grid[y][x] = 1;
  79. // }
  80. for(int a =1;a<=num;a++){
  81. for(j=1;j<=num;j++){
  82. if(!visited[a][j] && grid[a][j] == 1){
  83. cnt++;
  84. int t = bfs(a,j);
  85. if(t > maxx ){
  86. maxx = t;
  87. }
  88. }
  89. }
  90. }
  91. printf("%d %d",cnt,maxx);
  92. }
Success #stdin #stdout 0.01s 5280KB
stdin
5
1 0 1 0 1
1 1 0 0 1
0 1 1 0 0
0 0 1 1 1
1 0 0 1 0
stdout
0 0