首页 > 学院 > 开发设计 > 正文

最短迷宫

2019-11-06 09:15:25
字体:
来源:转载
供稿:网友

这里写图片描述 这里写图片描述

代码:

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]); }

源码


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表