题目描述

给定你一个网格,行数和列数分别为 row , col ,其中有由 边长为1的正方形 拼成的图形。网格中的1表示放了正方形的网格,0表示没有放正方形的网格。

正方形 左右 或 上下 相接组成图形(对角线相接不算做一个图形),由正方形拼接而成的图形有且仅有一个,请你计算由正方形拼接成的图形的周长。

输入输出格式

输入格式

第一行有两个正整数 row , col ,表示网格的 行数 和 列数 ,数字中间用空格隔开。
接下来的 row 行,每行有 col 个数字,表示网格中的元素,元素之间用空格隔开。

输出格式

输出一个正整数用来表示组成图形的边长。

输入输出样例1

输入

4 4
0 0 1 1
0 0 1 0
0 0 1 1
1 1 1 0

输出

18

输入输出样例2

输入

4 4
1 1 1 1
0 0 0 1
0 0 1 1
0 0 0 0

输出

16

说明提示

-1≤row,col≤100
-网格中只有1 和 0两个元素。


代码实现:

核心思想找到所有的1,如果这个1是在边界或者挨着0,那周长的值就会加一
思路一:深搜这个矩阵,找到所有为1的位置。】

#include<iostream>
using namespace std;
const int maxv=101;int row,col;
int G[maxv][maxv];
bool vis[maxv][maxv]= {false};
int length=0;void dfs(int r,int c) {vis[r][c]=true;if(G[r][c]==1) {length+=(r==0)+(r==row-1)+(c==0)+(c==col-1)+(r!=0&&G[r-1][c]==0)+(r!=row-1&&G[r+1][c]==0)+(c!=0&&G[r][c-1]==0)+(c!=col-1&&G[r][c+1]==0);if(r-1>=0 && G[r-1][c]==1 && vis[r-1][c]==false){ //往上搜 dfs(r-1,c);}if(r+1<=row-1 && G[r+1][c]==1 && vis[r+1][c]==false){ //往下搜 dfs(r+1,c); }if(c-1>=0 && G[r][c-1]==1 && vis[r][c-1]==false){ //往左搜 dfs(r,c-1);}if(c+1<=col-1 && G[r][c+1]==1 && vis[r][c+1]==false){ //往右搜 dfs(r,c+1);}}
}int main() {cin>>row>>col;int sr=-1,sc=-1; //用来记录一个起点for(int i=0; i<row; i++) {for(int j=0; j<col; j++) {cin>>G[i][j];if(G[i][j]==1) {sr=i;sc=j;}}}if(sr!=-1) { //矩阵中有1dfs(sr,sc);cout<<length;} else {cout<<0;}return 0;
}

思路二:不需要深搜找1,双重for循环遍历一遍矩阵即可】

#include<iostream>
using namespace std;
const int maxv=101;int row,col;
int G[maxv][maxv];
int length=0;int main() {cin>>row>>col;for(int i=0; i<row; i++) {for(int j=0; j<col; j++) {cin>>G[i][j];}}for(int r=0;r<row;r++){for(int c=0;c<col;c++){if(G[r][c]==1){length+=(r==0)+(r==row-1)+(c==0)+(c==col-1)+(r!=0&&G[r-1][c]==0)+(r!=row-1&&G[r+1][c]==0)+(c!=0&&G[r][c-1]==0)+(c!=col-1&&G[r][c+1]==0);}}} cout<<length;return 0;
}

体会:不要盲目一上来就使用深搜,可能根本就用不到它。要体会一下深搜的适用场景,比如说这个题改成下边这样,输出红色点连成的路径。

【求由正方形组成的图形的周长】C++实现相关推荐

  1. 计算各种图形的周长(接口与多态)_JAVA

    Description 定义接口Shape,定义求周长的方法length(). 定义如下类实现接口Shape的抽象方法: (1)三角形类Triangle (2)长方形类Rectangle (3)圆形类 ...

  2. Java练习 SDUT-3338_计算各种图形的周长(接口与多态)

    计算各种图形的周长(接口与多态) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 定义接口Shape,定义求周长的方法l ...

  3. 计算各种图形的周长(接口与多态)(Java)

    计算各种图形的周长(接口与多态) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 定义接口Shape,定义求周长的方法l ...

  4. 正方形的面积用java写,java 编程 使用接口方式计算圆和正方形的面积(S)和周长(L)...

    interface Cal{ //使用接口方式计算圆和正方形的面积(S)和周长(L);cal:计算器; //get 获得 public static final double PI = 3.14; / ...

  5. sdut-oop-6 计算各种图形的周长(多态)

    sdut-oop-6 计算各种图形的周长(多态) 定义接口或类 Shape,定义求周长的方法length(). 定义如下类,实现接口Shape或父类Shape的方法. (1)三角形类Triangle ...

  6. Python 面向对象 计算各种图形的周长(接口与多态)

    Python 面向对象 计算各种图形的周长(接口与多态) Description 定义接口Shape,定义求周长的方法length(). 定义如下类实现接口Shape的抽象方法: (1)三角形类Tri ...

  7. Java计算各种图形的周长、面积利用接口,多态等知识实现

    知识点 接口,接口的实现 方法的重写 多态的运用 题目 利用接口.类.多态等知识,计算各种图形的周长和面积(圆,长方形,正方形) 解题思路: 创建一个接口Calculate,包含有三个方法, 求解周长 ...

  8. PTA 7-7 sdut-oop-6 计算各种图形的周长(接口与多态) (10 分) JAVA

    定义接口Shape,定义求周长的方法length(). 定义如下类实现接口Shape的抽象方法: (1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等. 定义测 ...

  9. 7-1 sdut-oop-6 计算各种图形的周长(多态)

    定义接口或类 Shape,定义求周长的方法length(). 定义如下类,实现接口Shape或父类Shape的方法. (1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Ci ...

最新文章

  1. 粒子群算法(PSO)Matlab实现(两种解法)
  2. 基础实验中的抗体选择过程和避坑Tips
  3. Oracle如何监控表的DML次数
  4. Java Persistence with MyBatis 小结2
  5. 产品新人没有完整项目经验?这篇文章帮你打开思路
  6. QML笔记-整合C++及单例模式管理QML中控件
  7. linux经典命令-Web服务器管理
  8. [译]IIS 8.0应用初始化
  9. 说你呢,装着JDK8,却孜孜不倦的写着 JDK6 的代码,写了3年了,JDK8的特性都没用过......
  10. Maven本地仓库搭建
  11. OpenRefine中的正则表达式
  12. 当贝投影F5发布:3000ANSI流明亮度,6S疾速开机,16ms超低延迟
  13. 程序员 2015 年工作总结
  14. [Java]Spring Ioc讲解,不怕你不懂
  15. intel i5处理器layout及原理图参考
  16. python启动netron
  17. 隐藏和显示Lion系统文件夹
  18. Laradock Mac下的环境配置和安装
  19. UE5 QRCode插件使用
  20. 使用 Arduino IDE 对 STM32进行程序开发,安装开发板

热门文章

  1. win10硬盘锁怎么解除_大师教你解决win10系统取消移动硬盘写保护的图文办法
  2. Bootstrap全部知识点总结
  3. Python查询12306车票和使用selenium进行买票
  4. 灰色预测模型--两秒直接上手
  5. How to Generate PDF in Ruby on Rails(HowtoGeneratePDFs) ZT
  6. WindowsMedia/FormWMP.cs
  7. 请出中本聪,迎接新世界(1-5)
  8. 显示unc路径服务器根目录,路径解释:绝对、相对、UNC 和 URL
  9. 大一学生关心的问题(一)
  10. 在MPLAB X IDE下用SEGGER J-LINK调试PIC32