代码:
char[][] w = { {'#','S','#','#','#','#','#','#','.','#'}, {'.','.','.','.','.','.','#','.','.','#'}, {'.','#','.','#','#','.','#','#','.','#'}, {'.','#','.','.','.','.','.','.','.','.'}, {'#','#','.','#','#','.','#','#','#','#'}, {'.','.','.','.','#','.','.','.','.','#'}, {'.','#','#','#','#','#','#','#','.','#'}, {'.','.','.','.','#','.','.','.','.','.'}, {'.','#','#','#','#','.','#','#','#','.'}, {'.','.','.','.','#','.','.','.','G','#'}}; //记录点(i,j)到终点的距离 //0代表还未遍历或者距离为零 //非零整数代表离远点的距离 //Integer.MAX_VALUE代表不可到达 int[][] len = new int[10][10]; int solve() { for(int i=0;i<10;++i) { for(int j=0;j<10;++j) { if(w[i][j]=='#') { len[i][j] = Integer.MAX_VALUE;//Integer.MAX_VALUE代表不可到达 } } } dfs(0, 1, -1); return len[9][8]; } void dfs(int x, int y, int step) { //该点是终点 if(w[x][y]=='G') { len[x][y] = step+1; return ; } //该点是墙,或者是该点遍历过 if(w[x][y]=='#'||len[x][y]!=0) return ; //否则,该点的值在原先的基础上加1 len[x][y] = step+1; //确定该点不在墙外 if(y-1>0) dfs(x, y-1, len[x][y]); if(y+1<10) dfs(x, y+1, len[x][y]); if(x-1>0) dfs(x-1, y, len[x][y]); if(x+1<10) dfs(x+1, y, len[x][y]); }源码:
新闻热点
疑难解答