• Matlab统计棋盘连通分量(空值区域)的大小和个数


    一、基础设定

    在20x20的棋盘矩阵中,设定黑子为1,空值为0

    现需要统计空值(连通分量)的大小和个数并标记,如下图所示:

    以此类推

    其中,最大的连通分量如下:

    二、Matlab程序

    以下是红色标记连通分量大小为6的Matlab程序

    1. clear,clc,close all
    2. m = 20;
    3. n = 20;
    4. markersize = floor(80-(max([m n])));
    5. rng('default');
    6. A = randn(m,n);
    7. A(abs(A)<=1) = 1;
    8. A(abs(A)>1) = 0;
    9. Ar = 1-A;
    10. cc4 = bwconncomp(Ar,4);
    11. L4 = labelmatrix(cc4);
    12. counts = [];
    13. for i = 1:numel(cc4.PixelIdxList)
    14. idx = cc4.PixelIdxList{1,i};
    15. Ar(idx) = numel(cc4.PixelIdxList{1,i});
    16. counts(i) = numel(cc4.PixelIdxList{1,i});
    17. end
    18. size=flip(unique(counts));
    19. fprintf('编号\t\t连通分量大小\t\t个数\n');
    20. for i = 1:numel(size)
    21. fprintf('%d\t\t\t%d\t\t\t%d\n',i,size(i),sum(counts==size(i)));
    22. end
    23. fprintf('连通分量总个数:%d\n',cc4.NumObjects);
    24. mark = 6; % 需要标记的连通分量大小
    25. Ar(Ar~=mark)=0;
    26. fprintf('原始棋盘矩阵:\n');
    27. disp(A); % 黑子为1,空值为0
    28. fprintf('红色标记的棋盘矩阵:\n');
    29. disp(Ar); % 红子为1,其余为0
    30. go(A,markersize,m,n,[],[],[])
    31. go(A,markersize,m,n,Ar,mark,sum(counts==mark))
    32. function go(A,markersize,m,n,Ar,mark,count)
    33. figure('color',[1 1 1],'position',[600,100,400*1.5,400*1.5]);
    34. hold on
    35. spy(A,'k',markersize);
    36. spy(Ar,'r',markersize);
    37. axis([1 n 1 m]);
    38. xticks([1:n]);
    39. yticks([1:m]);
    40. xlabel("红色标记的连通分量大小为:"+mark+",个数为:"+count);
    41. ax = gca;
    42. ax.GridColor = [0 .5 .5];
    43. ax.GridLineStyle = '-';
    44. ax.GridAlpha = 0.5;
    45. ax.Layer = 'top';
    46. ax.XRuler.TickLabelGapOffset = 20;
    47. ax.YRuler.TickLabelGapOffset = 20;
    48. ax.YAxis.Label.Visible = 'off';
    49. grid on
    50. end

    三、输出结果

    1. 编号 连通分量大小 个数
    2. 1 10 1
    3. 2 8 1
    4. 3 7 2
    5. 4 6 4
    6. 5 5 2
    7. 6 4 2
    8. 7 3 3
    9. 8 2 12
    10. 9 1 22
    11. 连通分量总个数:49
    12. 原始棋盘矩阵:
    13. 1 1 1 0 0 1 0 1 1 0 1 0 0 0 1 1 0 0 1 0
    14. 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1
    15. 0 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1
    16. 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1
    17. 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0
    18. 0 0 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0
    19. 1 1 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1
    20. 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1
    21. 0 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 1
    22. 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1
    23. 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1
    24. 0 0 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1
    25. 1 0 0 1 1 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1
    26. 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 0
    27. 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1
    28. 1 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
    29. 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0
    30. 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1
    31. 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1
    32. 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 1 0 1
    33. 红色标记的棋盘矩阵:
    34. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    35. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    36. 0 0 0 0 0 0 6 6 6 0 0 0 0 0 0 0 0 0 0 0
    37. 0 0 0 0 0 0 6 0 6 0 0 0 0 0 0 0 0 0 0 0
    38. 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0
    39. 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0
    40. 0 0 0 0 0 0 6 6 6 6 0 0 0 0 0 0 0 0 0 0
    41. 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0
    42. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    43. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    44. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    45. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    46. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    47. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    48. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    49. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    50. 0 0 0 0 0 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0
    51. 6 0 0 0 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0
    52. 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    53. 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

  • 相关阅读:
    阿里云C++二面面经
    npm 常用的命令
    在CentOS 7上关闭SELinux
    使用keytool生成Tomcat证书
    Java并发-ThreadLocal的使用
    RocketMQ 系列(四) 消息存储
    从 LinkedHashMap 源码到手撕 LRU 缓存
    .NET MVC 修改项目URL为IP
    Jetson nano 安装Ubuntu20.04系统
    javaweb-SpringBoot基础
  • 原文地址:https://blog.csdn.net/m0_67790374/article/details/133843843