回溯法總結

2021-06-20 02:41:49 字數 2341 閱讀 4501

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.求所有解的具...