問題1:n個盒子分別放n個數字 有哪些方法?
#include
using
namespace
std;
int book[10],a[10],n;
void dfs(int step) //step表示當前站在盒子前的序號
//站在第step個盒子前,該放幾號牌?
for(int i=1;i<=n;i++)
if(book[i] == 0)
return;
}int main()
問題2:解救人質
在乙個n*m的地圖中,有多個障礙。得知了搜尋人員的起點與被解救人員的終點後需要求出解救的最短步數。
要點:移動
定義乙個二維陣列next[4][2],規定右下為正方向。
int next[4][2] = ,//向右走
,//向下走
,//向左走
}//向上走;
tx = x+next[1][0];
ty = y+next[1][1];
嘗試四個方向:
for(int k=0;k<4;k++)
#include
#define local
using namespace std;
int a[101][101],book[51][51],n,m,start_x ,start_y ,end_x,end_y;
int min = 999;
int next[4][2] =
,//向右走
,//向下走
,//向左走
//向上走
};void
dfs(int
x,int
y,int
step)
for(int
k =0;k
<4;k++)
}return;
}int
main()
深度優先搜尋DFS
作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...
深度優先搜尋 DFS
深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...
深度優先搜尋(dfs)
深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...