当前位置:   article > 正文

蓝桥杯刷题 深度优先搜索-[2410]最大连通(C++)

蓝桥杯刷题 深度优先搜索-[2410]最大连通(C++)

问题描述

小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。

  1. 110010000011111110101001001001101010111011011011101001111110
  2. 010000000001010001101100000010010110001111100010101100011110
  3. 001011101000100011111111111010000010010101010111001000010100
  4. 101100001101011101101011011001000110111111010000000110110000
  5. 010101100100010000111000100111100110001110111101010011001011
  6. 010011011010011110111101111001001001010111110001101000100011
  7. 101001011000110100001101011000000110110110100100110111101011
  8. 101111000000101000111001100010110000100110001001000101011001
  9. 001110111010001011110000001111100001010101001110011010101110
  10. 001010101000110001011111001010111111100110000011011111101010
  11. 011111100011001110100101001011110011000101011000100111001011
  12. 011010001101011110011011111010111110010100101000110111010110
  13. 001110000111100100101110001011101010001100010111110111011011
  14. 111100001000001100010110101100111001001111100100110000001101
  15. 001110010000000111011110000011000010101000111000000110101101
  16. 100100011101011111001101001010011111110010111101000010000111
  17. 110010100110101100001101111101010011000110101100000110001010
  18. 110101101100001110000100010001001010100010110100100001000011
  19. 100100000100001101010101001101000101101000000101111110001010
  20. 101101011010101000111110110000110100000010011111111100110010
  21. 101111000100000100011000010001011111001010010001010110001010
  22. 001010001110101010000100010011101001010101101101010111100101
  23. 001111110000101100010111111100000100101010000001011101100001
  24. 101011110010000010010110000100001010011111100011011000110010
  25. 011110010100011101100101111101000001011100001011010001110011
  26. 000101000101000010010010110111000010101111001101100110011100
  27. 100011100110011111000110011001111100001110110111001001000111
  28. 111011000110001000110111011001011110010010010110101000011111
  29. 011110011110110110011011001011010000100100101010110000010011
  30. 010011110011100101010101111010001001001111101111101110011101


如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置,则称两个位置连通。与某一个标为 1 的位置连通的所有位置(包括自己)组成一个连通分块。
请问矩阵中最大的连通分块有多大?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。

本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

最大运行时间:1s最大运行内存:256M

知识点:深度优先搜索,字符数组

 代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N=101;
  5. char a[N][N];
  6. int row=30,col=60;
  7. int cnt;//最大连通块中1的数量
  8. int dx[4]={0,0,-1,1},dy[5]={1,-1,0,0};//“上、下、左、右”四个方向
  9. int dfs(int x,int y)
  10. {
  11. if(a[x][y]=='0')
  12. {
  13. return 0;
  14. }
  15. a[x][y]='0';
  16. int sum=1;//连通块中1的数量
  17. for(int i=0;i<4;i++)//四个方向遍历
  18. {
  19. int nx=x+dx[i],ny=y+dy[i];
  20. if(nx<0||ny<0||nx>=row||ny>=col)
  21. {
  22. continue;
  23. }
  24. sum+=dfs(nx,ny);
  25. }
  26. return sum;
  27. }
  28. int main()
  29. {
  30. // for(int i=0;i<row;i++)
  31. // {
  32. // cin>>a[i];
  33. // }
  34. // for(int i=0;i<row;i++)
  35. // {
  36. // for(int j=0;j<col;j++)
  37. // {
  38. // if(a[i][j]=='0')
  39. // {
  40. // continue;
  41. // }
  42. // cnt=max(cnt,dfs(i,j));
  43. // }
  44. // }
  45. // cout<<cnt<<endl;
  46. cout<<148<<endl;
  47. return 0;
  48. }

因为是填空题,为了减小时间复杂度,直接输出结果,将主体代码注释掉。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/425011
推荐阅读
相关标签
  

闽ICP备14008679号