很老的题了,可以参考下面的python写的:
http://splunker.sinaapp.com/%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%8C%E8%AE%A1%E7%AE%97%E6%B5%B7%E5%B2%B8%E7%BA%BF%E9%95%BF%E5%BA%A6/
http://splunker.sinaapp.com/%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%8C%E8%AE%A1%E7%AE%97%E6%B5%B7%E5%B2%B8%E7%BA%BF%E9%95%BF%E5%BA%A6/
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class CoastLine {
int n, m;
int[][] g;
CoastLine(int n, int m) {
this.n = n;
this.m = m;
g = new int[n+2][m+2];
}
int coastLineLength() {
dfs(0,0);
int len = 0;
for(int i=1; i<n+2; i++) {
for(int j=1; j<m+2; j++) {
int test = g[i][j]+g[i-1][j];
if(test>=5 && test < 10) len++;
test = g[i][j]+g[i][j-1];
if(test>=5 && test < 10) len++;
}
}
return len;
}
//将海域标记为5
void dfs(int i, int j) {
if(g[i][j] == 1) return;
if(g[i][j] == 0) {
g[i][j] = 5;
if(i>0) dfs(i-1,j);
if(i < n+1) dfs(i+1,j);
if(j>0) dfs(i,j-1);
if(j < m+1) dfs(i,j+1);
}
} public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new File("d:\\a.txt"));
String line = scanner.nextLine();
int n = Integer.parseInt(line.split(" ")[0]);
int m = Integer.parseInt(line.split(" ")[1]);
System.out.println(n+" "+m);
CoastLine c = new CoastLine(n,m);
for(int i=0; i<n; i++) {
line = scanner.nextLine();
for(int j=0; j<m; j++) {
c.g[i+1][j+1] = line.charAt(j)-'0';
}
}
scanner.close();
System.out.println("result is "+c.coastLineLength());
for(int i=0; i<n+1; i++)
System.out.println(Arrays.toString(c.g[i]));
}}
感觉这个思路不错,希望能帮上楼主。