java 算法题
一个java算法题,大家帮忙给点意见吧,实在想不出来了。
悬赏分:0 - 解决时间: 2010年10月26日 19时20分
如下的数组中,a-z代表海拔(全小写),水往低处流,只能上下左右流不能对角线流。问至少需要几个排水管,才能将地图上的水给排干。
写一个算法,return个int代表最少的排水管数。
大家给给意见吧,想不出来。
{"ccccc",
"cbbbc",
"cbabc",
"cbbbc",
"ccccc"}
Returns: 1 // 谁都可以流到中间的a,所以1个就够
{"cbabcbabc",
"cbabcbabc",
"cbabcbabc",
"cbabcbabc"}
Returns: 2 //水杯中间的山峰给挡住了,所以需要两个
{"ccccccccccc",
"caaaaaaaaac",
"caaaaaaaaac",
"caazpppzaac",
"caapdddpaac",
"caapdddpaac",
"caapdddpaac",
"caazpppzaac",
"caaaaaaaaac",
"caaaaaaaaac",
"ccccccccccc"}
Returns: 2 //里一层d外一层a,需要两个
{"ab",
"ba"}
Returns: 2 //不能对角线流,需要两个
关于这道题,我的思路如下:
首先转换成数字二维数组:自动产生数组 管道数d=0
例如:
3 7 5 0 2 7 5
8 1 5 7 3 5 7
2 1 4 2 0 8 3
8 1 7 8 6 9 7
2 8 5 1 5 9 9
8 7 1 8 2 2 7 这样看起来好看些 我就用的0到9的数字
一个数字一个数字的判断(上下左右) 判断过的数字就不判断了(这点很重要)
判断相邻数字【注意边界数据只判断相邻有数据的位置】
1:如果它最小 d++ 然后判断下一位(右边)
2:如果有与它相等的数字,判断那个相等的数字,第一个与它相等的(上下左右的顺序)
3:如果有比当前数字小的数字,判断那个小的(上下左右的顺序)
如果发现有什么弊端,请指出O(∩_∩)O~ 刚写了一下程序 感觉还挺麻烦 。。。。。
------解决方案--------------------排水管道的作用体现在哪??有点走迷宫的感觉
------解决方案--------------------看不懂。。。。