優秀的模板;
很棒的總結:
具體講解可以參考《啊哈!演算法》
題2045
題目描述
在乙個55的地圖上,存在著障礙物和平地。在這個地圖中,小x想要找到回家的路。
地圖上,你可以每次上下左右行走一步。
他希望他回家所走的是最短路,請問,他所走的路徑中,最短路的方案數。
輸入共5行,每行是乙個字串。
「.」表示空地,「」表示障礙物,「s」表示小x的家
小x起始時位於左上角。
輸出乙個數,表示方案數。
樣例輸入
…**.…
..*……s
樣例輸出
5
#include
#include
using
namespace std;
int n =5;
char a[30]
[30];
bool visited[30]
[30];
int mins =
9999999
;int hash[
100]
;void
dfs(
int x,
int y,
int step),,
,};//按照右下左上的順序
//判斷是否到達終點
if(a[x]
[y]==
's')
return;}
for(
int k =
0;k<
4;k++
)//四個方向 }}
intmain()
startx=
0;starty=0;
//起始點
visited[startx]
[starty]
=true
;//標記起始點在已走路徑中,防止後面重複走
dfs(startx,starty,0)
; cout<;//輸出
getchar()
;getchar()
;return0;
}
題2046 輸出全排列
題目描述
給出乙個數n,要求你輸出1到n的全排列(要求字典序從小到大)
(n<=10)
輸入乙個數n
輸出包括若干行,每行包含n個數,表示相應的全排列值。
樣例輸入
4樣例輸出
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1提示無
dfs解法
#include
#include
using
namespace std;
int n,i;
int a[
100]
;bool visited[
100]
;void
dfs(
int step)
cout<<
'\n'
;return;}
for(
int j=
1;j<=n;j++
)//n個數迴圈}}
intmain()
另一種解法:使用stl函式
#include
#include
#include
using
namespace std;
intmain()
while
(next_permutation
(num,num+n));
getchar()
;getchar()
;return0;
}
題2047 x皇后問題
皇后可以橫著,豎著,斜著走,所以問題可以簡化為:首先進行全排序,即滿足橫豎互不影響,再將滿足斜著不影響的輸出即可,即abs(i-j) != abs(a[i]-a[j])。題目要求字典數最小的輸出,即全排列第乙個。
題目描述
請輸出字典序最小的x皇后問題對應的排列。
(x<=10)
輸入乙個數x
輸出包括一行,輸出1~x的乙個排列,滿足x皇后問題的要求。
樣例輸入
8樣例輸出
1 5 8 6 3 7 2 4
#include
#include
#include
using
namespace std;
int n,a[
1000
],k=0;
bool visited[
1000];
void
output()
cout<<
'\n'
; k++
;//因為只需輸出第一組序列,k用來計數
}void
dfs(
int step)
}for
(int i=
1;i<=n;i++)}
}int
main()
BFS與DFS演算法
dfs總結 首先,我們先了解一下bfs,bfs又稱廣度優先搜尋,一般都是用於解決一些圖,樹的遍歷問題。其實廣度優先搜尋就類似與二叉樹的層序遍歷過程,需要借助c 中stl裡面的queue佇列容器來實現這個過程。它其實就是一種分層查詢的過程,每次向前走一步,都會去訪問一批可以訪問的節點,不會存在dfs裡...
演算法 DFS與BFS
一 dfs 深度優先搜尋 dfs 深度優先遍歷dfs與樹的先序遍歷比較類似。假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點然後依次訪問它的所有鄰接結點,每次訪問乙個鄰接結點時,以該鄰接結點為根結點繼續進行dfs,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪...
演算法筆記之DFS與 BFS
基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...