回 帖 发 新 帖 刷新版面

主题:这样做行吗?

那是我们学递归回溯的时候,老师出了这样一道题:
[b]输入x,y和一个x×y的矩形,矩形由_(表空格)和*组成求围在*中的格子数。[/b]
例如:
7 6
_*****__   _*****_
_**__*__   _**++*_
__*_**__   __*+**_
***_***_   ***+***
*___***_   *+++***
*****___   *****__
  图一       图二
输入文件见图一。
所求的格子数即图二中的+数。

老师教的方法是:
1.读入文件,将搜索范围定位[0..x+1,0..y+1]
2.从(0,0)开始做递归。
 2-1.将这个点改为0
 2-2.向它的上下左右搜索,如果为_则递归这个格子
3.统计剩余的_数
算法一:
_________  0________   000000000  000000000 [B]共[/B]
__*****__   __*****__   00*****00  00*****00 [B]计[/B]
__**__*__   __**__*__   00**__*0_  00**__*00 [B]十[/B]
___*_**__   ___*_**__   000*_**__  000*_**00 [B]六[/B]
_***_***_   _***_***_   0***_***_  0***_***0 [B]步[/B]
_*___***_   _*___***_   0*___***_  0*___***0
_*****___   _*****___   0*****___  0*****000
_________   _________   000______  000000000
  Step0       Step1       Step10     Step16 

当时我们正在学递归回溯,所以也没有人像太多就这么做了。不过现在我认为这样更简单、更快:

而现在我认为这样做更省事(主要是我省事,不是机器):
1.读入文件,将搜索范围定位[0..x+1,0..y+1]
2.将四个边定义为0
3.从左上向右下(偶数次执行2时改为从右下向左上)搜索,把所有上下左右中有0的_改为0
4.重复2直至2步把0个_改为0
5.统计剩余的_数
算法二:
_________  000000000   000000000  000000000 [B]共[/B]
__*****__   0_*****_0   00*****00  00*****00 [B]计[/B]
__**__*__   0_**__*_0   00**__*00  00**__*00 [B]三[/B]
___*_**__   0__*_**_0   000*_**00  000*_**00 [B]步[/B]
_***_***_   0***_***0   0***_***0  0***_***0
_*___***_   0*___***0   0*___***0  0*___***0
_*****___   0*****__0   0*****__0  0*****000
_________   000000000   000000000  000000000
  Step0       Step1       Step2      Step3  

谁有其他的方法?说一说,谢谢。

回复列表 (共10个回复)

沙发

偶想的,还没编过~~~~
任意找一个空格,由它向八个方向拓展,一直拓展,直到无法拓展位置,把他们标记为*,如果所有空格都没碰到边界,则这是所求格子,记下个数,然后再找下一个空格,知道整个矩阵都成*。

板凳

按照1楼:
_*****__  _*****__
_**0_*__  _**00*__ 
__*_**__  __*0**__
***_***_  ***0***_ 
*___***_  *000*___ 
*****___  *****___ 
 Step12    Step17

3 楼

有问题吗?

4 楼

时间复杂度……

5 楼

偶觉得这就是一个类似广度搜索嘛,如果想要快一点,直接枚举所有空格,判断一下就行,时间复杂度为n*n

6 楼

我觉得你的方法和老师的差不多阿。。。。。。
我说一下,我觉得其实你们的做法的时间复杂度都一样(X*Y),其实第归过的格子标记一下,以后就不要管它了
说实话,我很笨,想不出你们的方法,我觉得绿步甲的方法更好
搂主,你的方法如果碰到回字形的*可能就不对了(或者说没错,但意思错了,题目没说清楚,如果围住了,但里面还有*怎么办?),因为你考虑的是外部

7 楼

我说的是空间复杂度,不是时间。

8 楼

[quote]时间复杂度……
[/quote]
可你明明说时间复杂度嘛~~~骗小孩~~~~[em52][em52][em52]

空间也是X*Y嘛

9 楼

递归的复杂度(空间)是x*y?

10 楼

数组因该是x*y阿,

我来回复

您尚未登录,请登录后再回复。点此登录或注册