Problem 1177 # 深搜又怎样

2023-12-14 22:48
文章标签 怎样 problem 1177

本文主要是介绍Problem 1177 # 深搜又怎样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

 

话说xgqin在考虑这个学期ACM课程考试试题的时候,小A同学在QQ上给xgqin留言,以下是两人的对话内容:

A:老师 A:明天考试要考察什么算法啊 xgqin:亲,你这个问题让我怎么回答? A:就是考试重点是什么 xgqinsorry 没有终点 xgqin:重点 A:深搜要考吗 xgqin:呵呵, A:懵逼表情 A:透露一下呗 xgqin

(PS: 学好语文很重要,以上两人对话中出现了多个错别字)

既然大家对深搜如此热爱,咱们就来一题呗。以下是你需要解决的问题:

在一个M×N的空间中,堆放着很多堆1×1×1的方块,方块的四周可以平铺其他方块,方块的上方也可以叠放其他方块(一块方块上方叠放的方块数不超过8块)。我们把平铺、叠放在一起的方块看成是一堆。你需要做的是找出在这M×N的空间中总共有多少堆方块以及最大的一堆方块包含的方块数。

输入

 

有多组测试样例。对每组测试样例:

第一行包含两个整型数M和N(1<= M, N<=100)。 接下来包含M行,每行包含N个字符,其中#号表示当前坐标下无方块,否则为1~9的数字字符C表示当前坐标下有C个方块叠放在一起。

输入M N 均为0时表示输入结束,0 0不作为输入样例。

输出

 

对每组测试样例,输出在M×N空间中,总共有多少堆方块,以及最大一堆方块包含的方块数。

输入范例

 

10 10 #1######## 121##2#### #3######## ###3333### ########## ##11111### ####1##### #####23### ####6#1### ########## 6 6 1####4 ##23## ###4## #9#5#9 ###6## 2####3 0 0

输出范例

 

4 18 7 20

超喜欢深搜的哈哈哈
#include<stdio.h>
#define MAX 100
int dir[8][2]={{-1,1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int floor[101][101];
int count;
int max;
int number;
int m;
int n;
void dfs(int x,int y)
{if(floor[x][y]==0){return ;}number=number+floor[x][y];floor[x][y]=0;int i;for(i=0;i<8;i++){if((x+dir[i][0]>0)&&(x+dir[i][0]<=m)&&(y+dir[i][1]>0)&&(y+dir[i][1]<=n)){dfs(x+dir[i][0],y+dir[i][1]);}}
}
int main()
{int i;int j;char c;do{scanf("%d %d",&m,&n);if(m==0&&n==0){break;}count=0;max=0;for(i=1;i<=m;i++){getchar();for(j=1;j<=n;j++){scanf("%c",&c);if(c=='#'){floor[i][j]=0;}else {floor[i][j]=c-'0';}}}for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(floor[i][j]>0){number=0;dfs(i,j);count++;if(number>max){max=number;}}}}printf("%d %d\n",count,max);}while(1);return 0;
}

这篇关于Problem 1177 # 深搜又怎样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/494165

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

十四、我们应当怎样做需求分析:子用例与扩展用例

用例模型作为UML中4+1视图中非常重要的一员,非常集中地体现了面向对象的分析与设计思想。用例模型将现实世界中连续的一个一个业务流程,按照场景划分到了一个一个的用例中。由于场景的出现,使得用例中的业务流程存在着高度的内聚性,从而成为了日后各种对象的雏形。同时,在用例分析中,又将那些存在于各个用例中的,相同或相近的业务操作提取出来,形成一个一个的子用例或扩展用例,又体现了面向对象设计中的复用性。现在

十三、我们应当怎样做需求分析:查询报表分析

在我以往的用例分析中,使用这样格式的用例模式,对于大多数业务操作流程来说是得心应手的,但对于有些功能来说总感觉不对劲。感觉不对劲的,就是那些查询、汇总与报表功能。对于这部分功能,需要我们描述的不是什么操作流程,而更重要的是那些数据项、数据来源、报表格式、数据链接,以及使用者、使用频率的说明。而这些,在以往的用例说明格式中统统都没有,怎么办呢?俗话说“东西是死的人是活的”,把我们的用例格式改改吧。

九、我们应当怎样做需求分析:功能角色分析与用例图

在我们进行一系列需求调研工作的同时,我们的需求分析工作也开始启动了。需求调研与需求分析工作应当是相辅相伴共同进行的。每次参加完需求调研回到公司,我们就应当对需求调研的成果进行一次需求分析。当下一次开始进行需求调研时,我们应当首先将上次需求分析的结果与客户进行确认,同时对需求分析中提出的疑问交给客户予以解答。这就是一个需求捕获->需求整理->需求验证->再需求捕获的过程。  但是,当我们经

八、我们应当怎样做需求调研:需求捕获(下)

前面我们讨论了,需求分析工作是一个迭代的过程:需求捕获->需求整理->需求验证->再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分。没有捕获哪来后面的整理与验证工作?但是,非常遗憾,按照我以往的经验,需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结为需求分析的问题,而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整

七、我们应当怎样做需求调研:需求捕获(上)

前面我们讨论了,需求分析工作是一个迭代的过程:需求捕获->需求整理->需求验证->再需求捕获······需求捕获是这个迭代过程的开始,也是整个需求分析工作中最重要的部分。没有捕获哪来后面的整理与验证工作?但是,非常遗憾,按照我以往的经验,需求捕获是我们最薄弱的环节。前面我提到的许许多多项目开发的问题都可以归结为需求分析的问题,而许许多多需求分析的问题又都可以归结为需求捕获不完整的问题。需求捕获是整

六、我们应当怎样做需求调研:迭代

前面我一直在反复强调这样一个观点,需求分析不是一蹴而就的,是一个反复迭代的过程。它将从第一次需求分析开始,一直持续到整个项目生命周期。为什么这样说呢?让我们一起来分析分析。  在第一次的需求分析阶段,我们在一段时期内需要与客户进行反复地讨论,这个过程往往是这样一个反复循环的过程:需求捕获->需求整理->需求验证->再需求捕获••••••  需求捕获,就是我们与客户在一起开研讨会

五、我们应当怎样做需求调研:需求研讨

前面我们探讨了业务研讨会应当怎样组织,下面我们再具体讨论一下我们应当怎样与客户讨论业务需求。如果说组织业务研讨会是项目经理的功底,那么讨论业务需求就是需求分析人员的功底。  以往我们常常认为,需求分析是一件最简单的事情。客户说他们需要做一个什么软件,有些什么功能,我们照着做就可以了,所谓的需求分析员就是需求的记录员。我要说,这是一个极大的错误,许多失败的软件项目,或者说软件项目中的需求问