日期:2014-05-20  浏览次数:20741 次

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~ 刚写了一下程序 感觉还挺麻烦 。。。。。







------解决方案--------------------
排水管道的作用体现在哪??有点走迷宫的感觉
------解决方案--------------------
看不懂。。。。