C/C++深度優先搜索(遞歸樹模擬)

 1 //C++深度優先搜索(遞歸樹模擬)
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <iostream>
 4 #define MAX_N 1000
 5 using namespace std;
 6     int a[MAX_N];
 7     int n,k;
 8     
 9 //已經從前i項獲得了和sum,而後對於i項以後的進行分支 
10 bool dfs(int i,int sum)
11 {
12     //若是前n項都計算過了 ,則返回sum是否與k相等 
13     if(i==n)
14     {
15         return sum==k;
16      } 
17     
18     //不加上a[i]的狀況的分支 
19     if(dfs(i+1,sum)) 
20     {
21         return true;
22     }
23     //加上a[i]的狀況的分支 
24     //if(dfs(i+1,sum+a[i+1]))
25     if(dfs(i+1,sum+a[i]))  
26     {
27         return true;
28     }
29     
30     //不管是否加上a[i]都不能湊成k就返回false 
31     return false;
32  } 
33  void solve()
34  {
35      //if(dfs(1,0)) 
36      if(dfs(0,0)) 
37     {
38          cout<<"Yes"<<endl;
39     }
40      else  
41      {
42          cout<<"No"<<endl;
43      }
44 } 
45 int main(void)
46 {
47     cin>>n;
48     int i,temp;
49     //for(i=1;i<=n;i++)
50     for(i=0;i<n;i++)
51     {
52         cin>>temp;
53         a[i]=temp;
54     }
55     cin>>k;
56     
57     solve();
58     
59     return 0;
60 }
深度優先遍歷圖的方法是,從圖中某頂點v出發:
(1)訪問頂點v;
(2)依次從v的未被訪問的鄰接點出發,對圖進行 深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;
(3)若此時圖中尚有頂點未被訪問,則從一個未被訪問的頂點出發,從新進行 深度優先遍歷,直到圖中全部頂點均被訪問過爲止。 固然,當人們剛剛掌握深度優先搜索的時候經常用它來走迷宮.事實上咱們還有別的方法,那就是 廣度優先搜索(BFS).
相關文章
相關標籤/搜索