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).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM