1、回溯法解決老鼠迷宮問題:
求一條路徑:
static int maze = ,,,
,,,,
,}; static int starti = 1, startj = 1; // 入口s
static int endi = 7, endj = 7; // 出口
static boolean falg = false;
public static void visit(int visiti,int visitj)
if(!falg && maze[visiti][visitj+1]==0)visit(visiti, visitj+1);
if(!falg && maze[visiti+1][visitj]==0)visit(visiti+1, visitj);
if(!falg && maze[visiti][visitj-1]==0)visit(visiti, visitj-1);
if(!falg && maze[visiti-1][visitj]==0)visit(visiti-1, visitj);
if(!falg) }
public static void out()else if (maze[i][j] == 0) else
}system.out.println();
} }public static void main(string args)
求出所有路徑:
static int maze = ,,,
,,,,
,}; static int starti = 1, startj = 1; // 入口
static int endi = 7, endj = 7; // 出口
public static void visit(int visiti,int visitj)else if (maze[i][j] == 0) else
}system.out.println();
}} if(maze[visiti][visitj+1]==0)visit(visiti, visitj+1);
if(maze[visiti+1][visitj]==0)visit(visiti+1, visitj);
if(maze[visiti][visitj-1]==0)visit(visiti, visitj-1);
if(maze[visiti-1][visitj]==0)visit(visiti-1, visitj);
maze[visiti][visitj]=0;
} public static void main(string args)
回溯法解決皇后問題:// 皇后的個數
private int queensnum = 4;
// column[i] = j 表示第 i 列的第 j 行放置乙個皇后
private int queens = new int[queensnum + 1];
// rowexists[i] = true 表示第 i 行有皇后
private boolean rowexists = new boolean[queensnum + 1];
// a[i] = true 表示右高左低的第 i 條斜線有皇后
private boolean a = new boolean[queensnum * 2];
// b[i] = true 表示左高右低的第 i 條斜線有皇后
private boolean b = new boolean[queensnum * 2];
// 初始化變數
private void init()
for(int i = 0; i < queensnum * 2; i++)
} // 判斷該位置是否已經存在乙個皇后,存在則返回 true
private boolean i***ists(int row, int col)
// 主方法:測試放置皇后
public void testing(int column)
system.out.println();
}else
// 撤銷上一步所放置的皇后,即回溯
rowexists[row] = a[row + column - 1] = b[queensnum + column - row] = false;
} }
} // 測試
public static void main(string args)
揹包問題:
回溯法總結
一般回溯法可以用兩種框架,一種遍歷方式 for迴圈 選擇方式 可以理解成到某一節點選擇或者不選 比較二者的差別 1.採用遍歷方式,for int i dep i選擇的方式記得判斷dep是否到達邊界dep nums.size 同時記得dep 2.遍歷方式中for迴圈的臨時變數儲存的是temp i 選擇...
回溯法總結
1 什麼是回溯法 回溯法也可以叫做回溯搜尋法,它是一種搜尋的方式。其實現使用遞迴。其本質為窮舉所有可能,找到我們想要的解。想要提高回溯法的效率,只能通過剪枝操作,減少重複或者無效的計算,具體手段可以使加快取或者提前中斷回溯。2 回溯法實現 要實現回溯法,需要注意以下三點 a.函式的返回值及引數 b....
leetcode回溯法總結
2018.7.30 前文 回溯法和dfs是不一樣的,回溯法有自己很獨特的模板,dfs是一種思想,回溯法是dfs的一種實現。先來看回溯法的典型題型 find a path to success 有沒有解 find all paths to success 求所有解 1.求所有解的個數 2.求所有解的具...