我试图在矩阵中递归地找到一个数字。
public class Test2 {
static char arry [][] = {{'#','#','#'},
{'#',' ',' '},
{'#',' ','#'},
{'#',' ','1'},
};
public static void main(String args []){
recursion(2,1);
}
private static void recursion(int row, int col) {
if(arry[row][col]=='1' && isInBound(row,col)==true){
System.out.println("Found at " + row + " " + col);
}else if ((isInBound(row,col)==true)&& arry[row][col]==' '){
recursion(row,col+1);
recursion(row,col-1);
recursion(row-1,col);
recursion(row+1,col);
}
}
private static boolean isInBound(int row, int col) {
boolean bol = false;
if(row<= arry.length && col <= arry[0].length){
bol = true;
}
return bol;
}
}
我正在尝试使程序能够从任何位置开始。例如,我从该程序的2,1位置开始。我遇到了异常。使用try catch循环时,该代码有时可用于某些输入。除非绝对必要,否则我不想使用try catch。我也在尝试在矩阵的所有4个方向上寻找。那就是我的问题开始的地方,我越界越厉害。
这有效:
public class Test2 {
static char arry[][] = { { '#', '#', '#' }, { '#', ' ', ' ' },
{ '#', ' ', '#' }, { '#', ' ', '1' }, };
static boolean[][] visited = new boolean[arry.length][arry[0].length];
public static void main(String args[]) {
// fill visited array
for (int i = 0; i < visited.length; i++) {
for (int j = 0; j < visited[0].length; j++) {
visited[i][j] = false;
}
}
recursion(2, 1);
}
private static void recursion(int row, int col) {
if (!isInBound(row, col) || visited[row][col])
return;
visited[row][col] = true;
if (arry[row][col] == '1') {
System.out.println("Found at " + row + " " + col);
return;
} else if (arry[row][col] == ' ') {
recursion(row, col + 1);
recursion(row - 1, col);
recursion(row + 1, col);
recursion(row, col - 1);
}
}
private static boolean isInBound(int row, int col) {
boolean bol = false;
if (row < arry.length && col < arry[0].length && col >= 0 && row >= 0) {
bol = true;
}
return bol;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句