dfs的核心思想就是遞迴,一直遞迴,,,,,,bfs是佇列的思想
一句話總結:bfs是浪費空間節省時間,dfs是浪費時間節省空間。
找最短路的時候可以用bfs,因為bfs找到的第乙個解一定是最優的,這個時候可以直接return
模板題:洛谷 p1706 全排列問題
題解:就是。。。先這樣,在那樣,再這樣就行了。(一直往下深搜的思想,和回溯的思想。)
ac**:
#include
#include
#include
using
namespace std;
#define n 10
int n;
int visit[n]=;
//數沒用過標0,數用過標1
int path[n]
;//每一次遞迴搜尋的是第 depth 個箱子中可以放什麼數字 我是這麼理解的。
void
dfs(
int depth)
for(
int i =
1; i <=n; i++)}
}int
main()
題目:洛谷 p1219 [usaco1.5]八皇后
題解:只是判斷困難了一點。以後要記住:主對角線上各陣列下標之差相等;斜對角線上各陣列下標之和相等。
ac**:
#include
#include
#include
using
namespace std;
#define n 17
bool col[n]
, tx[n]
, ty[n]
;int path[n]=;
int n,ans=0;
void
dfs(
int depth)
return;}
for(
int i =
1; i <= n; i++)}
}int
main()
題目:洛谷 p1036 選數
題解:要注意的是搜尋出來的每一種情況都是公升序陣列(防止資料重複)
#include
#include
using
namespace std;
#define n 5000007
int num[n]
;bool visit[n]
;int n, k,ans=0;
bool
issushu
(int n)
if(i >= n)
return1;
else
return0;
}}void
dfs(
int depth,
int l)
}/*cout << endl;*/if(
issushu
(nums)
) ans++
;return;}
for(
int i = l; i <= n; i++)}
intmain()
模板:洛谷 p1141 01迷宮
題解:由於詢問次數比較多,則我們應該每次bfs一遍後把答案記下(每個互相連通的格仔答案是一樣的嘛),避免重複查詢。
ps:做這個題花費了一周多的時間,每次提交都是wa,後來才發現錯在輸入格式上。。。
}題目:洛谷 p1451 求細胞數量
跟上乙個題一樣
#include
#include
#include
#include
#include
#include
using
namespace std;
#define n 100
int n, m;
int visit[n]
[n]=
;int xx[4]
=;int yy[4]
=;int ans =0;
struct node ;}
;boolok(
int x,
int y)
void
bfs(
int x,
int y)}}
}int
main()
}for
(int i =
1; i <= n; i++)}
for(
int i =
1; i <= n; i++
) cout << endl;
} cout << ans;
return0;
}
2023年暑假搜尋作業提交
p1036 選數 題目描述 已知 n 個整數 x1,x2,xn 以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29 輸入格式 鍵盤輸入,格式為 n,k 1 n 2...
作業排程問題深度搜尋定界演算法
深度搜尋定界 設有n臺處理機p1,p2,pn,和m個作業j1,j2,jm,處理機可並行工作,作業未完成不能中斷,作業ji在處理機上的處理時間為ti,求解最佳方案,使得完成m項工作的時間最短?本文用c 實現,方便c c 讀者。上界定得很鬆 g dmaxtime g drestjobtime 所以速度會...
二叉搜尋樹的LeetCode作業
刪除二叉搜尋樹中的節點 二叉搜尋樹中的搜尋 二叉搜尋樹中的插入操作 驗證二叉搜尋樹 二叉搜尋樹的最小絕對差 bst comments 二叉搜尋樹結點最小距離 nodes comments 將有序陣列轉換為二叉搜尋樹 tree 二叉搜尋樹的範圍和 二叉搜尋樹的最近公共祖先 search tree 二叉...