有人不愿意进去看的话,我贴这
private static List findMaxIsLand(int[][] m)
{
List poslist = new ArrayList();
if(m.length == 0 || m[0].length == 0)return poslist;
int x = m.length, y = m[0].length;
boolean[][] visited = new boolean[x][y];
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
if(m[i][j] == 0 || visited[i][j])continue;
Stack stk = new Stack();
List pos = new ArrayList();
int p = i * y + j;
stk.push(p);
pos.add(p);
visited[i][j] = true;
while(!stk.empty())
{
int p1 = stk.pop();
ArrayList nbs = getNeighbors(p1, m);
for(int k = 0; k < nbs.size(); k++)
{
int nb = nbs.get(k);
if(m[nb/y][nb%y] == 0 || visited[nb/y][nb%y])
continue;
stk.push(nb);
pos.add(nb);
visited[nb/y][nb%y] = true;
}
}
if(pos.size() > poslist.size())poslist = pos;
}
}
return poslist;
}
private static ArrayList getNeighbors(int pos, int[][] m)
{
int i = pos / m[0].length, j = pos % m[0].length;
ArrayList nbs = new ArrayList();
if(i + 1 < m.length)nbs.add((i + 1) * m[0].length + j);
if(i - 1 >= 0)nbs.add((i - 1) * m[0].length + j);
if(j + 1 < m[0].length)nbs.add(i * m[0].length + j + 1);
if(j - 1 >= 0)nbs.add(i * m[0].length + j - 1);
return nbs;
}