public class BRTdfs2 { public static char[][] map = new char[5][5]; public static int min = 999999; public static int[][] ArrNum = new int[5][5]; public static void dfs(int i,int j,int step){ if (map[i][j] == 'B') { min = Math.min(step,min); return; } if(map[i][j] == 'A'){ dfs(i+1,j,step+1); dfs(i,j+1,step+1); } if(map[i][j] == '+'){ if(j+1 < 5 && ((map[i][j+1] == '-' && ArrNum[i][j+1] == 0) || (map[i][j+1] == 'B'))){ ArrNum[i][j+1] = 1; dfs(i,j+1,step+1); ArrNum[i][j+1] = 0; } if(i+1 < 5 && ((map[i+1][j] == '-' && ArrNum[i+1][j] == 0) || (map[i+1][j] == 'B'))){ ArrNum[i+1][j] = 1; dfs(i+1,j,step+1); ArrNum[i+1][j] = 0; } if (i >= 1 && ((map[i-1][j] == '-' && ArrNum[i-1][j] == 0) || (map[i-1][j] == 'B'))){ ArrNum[i-1][j] = 1; dfs(i-1,j,step+1); ArrNum[i-1][j] = 0; } if(j >= 1 && ((map[i][j-1] == '-' && ArrNum[i][j-1] == 0) || (map[i][j-1] == 'B'))){ ArrNum[i][j-1] = 1; dfs(i,j-1,step+1); ArrNum[i][j-1] = 0; } }else if(map[i][j] == '-'){ if(j+1 < 5 && ((map[i][j+1] == '+' && ArrNum[i][j+1] == 0) || (map[i][j+1] == 'B'))){ ArrNum[i][j+1] = 1; dfs(i,j+1,step+1); ArrNum[i][j+1] = 0; } if(i+1 < 5 && ((map[i+1][j] == '+' && ArrNum[i+1][j] == 0) || (map[i+1][j] == 'B'))){ ArrNum[i+1][j] = 1; dfs(i+1,j,step+1); ArrNum[i+1][j] = 0; } if (i >= 1 && ((map[i-1][j] == '+' && ArrNum[i-1][j] == 0) || (map[i-1][j] == 'B'))){ ArrNum[i-1][j] = 1; dfs(i-1,j,step+1); ArrNum[i-1][j] = 0; } if(j >= 1 && ((map[i][j-1] == '+' && ArrNum[i][j-1] == 0) || (map[i][j-1] == 'B'))){ ArrNum[i][j - 1] = 1; dfs(i, j - 1, step + 1); ArrNum[i][j - 1] = 0; } } return; } public static void main(String[] args){ map = new char[][]{{'A', '+', '-', '+', '-'}, {'-','+','-','-','+'}, {'-','+','+','+','-'}, {'+','-','+','-','+'}, {'B','+','-','+','-'}}; ArrNum[0][0] = 1; dfs(0,0,0); System.out.println(min); } }
学了一点dfs,完全自己想的代码哈哈哈哈哈