題意:用@代表油田,八個方向互相連線,把相連的油田看作一塊油田,問你最多有多少塊油田。
思路:本題其實本質就是乙個迷宮問題,所以我們就可以用dfs或者bfs,本題我們當然採用dfs,用乙個vis標記一下,然後從頭開始遍歷,如果這個點等於『@』並且vis為0時,開始bfs一次,記錄bfs的次數,bfs的次數就是結果。
#include
using namespace std;
const
int maxn =
100;
char str[maxn]
[maxn]
;int vis[maxn]
[maxn]
, n, m;
int dx[10]
=;int dy[10]
=;int cnt =1;
void
dfs(
int x,
int y)
}int
main()
for(
int i =
0; i < n; i++)}
} cout<}return0;
}
題意:就是給你乙個棋盤形狀不規則,用:『#』代表棋盤,並且同一行或者同一列不能只能有乙個棋子,問你能有多少種方法。
思路:因為本題的資料非常的小,最大也就是10,但是它告訴你答案卻是非常的大,所以很容易想到dfs。如何dfs搜尋,我們dfs搜尋的使用用vis標記縱列,dfs搜尋橫列
**:
#include
#include
using namespace std;
const
int maxn =11;
char str[maxn]
[maxn]
;int vis[maxn]
;//標記縱列
int sum , n, m, num;
void
dfs(
int x)
if(x >= n)
return
;for
(int i =
0; i < n; i++)}
dfs(x+1)
;}intmain()
return0;
}
題意:在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
思路:本題跟上面的題型差不多,只不過在搜尋的時候增加判斷語句,不允許處在與棋盤邊框成45角的斜線上,所以需要再增加乙個判斷。但是此題存在乙個問題就是是多組資料輸入,所以需要打表,因為就存在1~10中情況,所以需要預處理。
#include
using namespace std;
const
int maxn =11;
int vis[maxn]
, record[maxn]
;int res[maxn]
, ans, n;
bool check
(int x1,
int y1,
int x2,
int y2)
//判斷是否在棋盤邊框成45角的斜線上
void
dfs(
int pos)
//以橫座標深搜
int flag;
for(
int i =
0; i < n; i++)}
if(!flag)
//不再在棋盤邊框成45角的斜線上}}
}int
main()
while
(scanf
("%d"
,&n)
,n !=0)
return0;
}
**:
#include
#include
using namespace std;
const
int maxn =
100;
int vis[maxn]
[maxn]
, path[maxn]
[maxn]
;int dx[8]
=;int dy[8]
=;int p, q, flag =0;
;void
dfs(
int x,
int y,
int step)
for(
int i =
0; i <
8; i++)}
}int
main()
printf
("\n");
}if(t !=0)
printf
("\n");
}return0;
}
深度優先搜尋DFS
作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...
深度優先搜尋 DFS
深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...
深度優先搜尋(dfs)
深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...