主题:这样做行吗?
[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
谁有其他的方法?说一说,谢谢。