输入长和宽,如何输入对应的“.”、“#”、“@”,@的位置为起始点,只能走“.”,不能走#,求最长的距离
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main{
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
static char[][] map = new char[30][30];//表示输入的整个布局
static int[][] vis = new int[30][30];//标记是否走过,走过为1,没有走过为0
static int[][] ne = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};//控制上下左右前进
static int n, m, res = 0;
public static void dfs(int x, int y){
vis[x][y] = 1;
for(int i = 0; i < 4; i++){ //四个方向
int nx = x + ne[i][0];
int ny = y + ne[i][1];
if(nx < 0 || nx >= m || ny < 0 || ny >= n || map[nx][ny] == '#' || vis[nx][ny] == 1){
continue;
}
res++;
dfs(nx,ny);
}
}
public static void main(String[] args) throws IOException{
String s[] = in.readLine().split(" ");
n = Integer.parseInt(s[0]);
m = Integer.parseInt(s[1]);
if(n==0||m==0) break;
int x = 0, y = 0;
res = 0;
for(int i = 0; i < vis.length; i++)//先将vis标记数组填充为0
Arrays.fill(vis[i], 0);
for(int i = 0; i < m; i++){ //逐行添加
String s1 = in.readLine();
if(s1.indexOf('@') != -1){ //当输入到@符号时,记录该位置
x = i;
y = s1.indexOf('@');
}
map[i] = s1.toCharArray(); //将输入的每个字符按行为单位添加进布局数组当中
}
dfs(x, y);
out.write((res+1)+"\n");
out.flush();
}
}
判断一个由1和0组成的矩阵,判断相邻的1的个数
private static void DFS(char[][] arr, int x, int y) {
arr[x][y]='0'; //标记此点以及走过
result++;
if (x+1!=arr.length && arr[x+1][y]=='1'){
DFS(arr,x+1,y);
}
if (x-1!=-1 && arr[x-1][y]=='1'){
DFS(arr,x-1,y);
}
if (y+1!=arr[x].length && arr[x][y+1]=='1'){
DFS(arr,x,y+1);
}
if (y-1!=-1 && arr[x][y-1]=='1'){
DFS(arr,x,y-1);
}
}