dfs的幾個基礎示例 acwin 91~94

 11~n 這 n 個整數中隨機選取任意多個,輸出全部可能的選擇方案。
 2 
 3 輸入格式
 4 輸入一個整數n。
 5 
 6 輸出格式
 7 每行輸出一種方案。
 8 
 9 同一行內的數必須升序排列,相鄰兩個數用剛好1個空格隔開。
10 
11 對於沒有選任何數的方案,輸出空行。
12 
13 本題有自定義校驗器(SPJ),各行(不一樣方案)之間的順序任意。
14 
15 數據範圍
16 1≤n≤15
17 輸入樣例:
18 3
19 輸出樣例:
20 
21 3
22 2
23 2 3
24 1
25 1 3
26 1 2
27 1 2 3
 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 vector<int> result;
 7 vector<int> v;
 8 int n;
 9 
10 void dfs(int i)
11 {
12    if(i == n){
13        for(auto& e:result){
14            cout << e << ' ';
15        }
16        cout <<endl;
17        return;
18    } 
19    
20    result.push_back(v[i]);
21    dfs(i+1);
22     result.pop_back();
23    
24    dfs(i+1);
25    
26 }
27 
28 int main()
29 {
30     
31     cin >> n;
32     for(int i= 1;i <=n;i++){
33         v.push_back(i);
34     }
35     
36     dfs(0);
37     
38     return 0;    
39 }
View Code

 

1~n 這 n 個整數中隨機選出 m 個,輸出全部可能的選擇方案。

輸入格式
兩個整數 n,m ,在同一行用空格隔開。

輸出格式
按照從小到大的順序輸出全部方案,每行1個。

首先,同一行內的數升序排列,相鄰兩個數用一個空格隔開。

其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面(例如1 3 5 7排在1 3 6 8前面)。

數據範圍
n>0 ,
0≤m≤n ,
n+(n−m)≤25
輸入樣例:
5 3
輸出樣例:
1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 
 1 #include <iostream>
 2 #include <vector>
 3 
 4 
 5 using namespace std;
 6 
 7 int n ,m;
 8 vector<int> result;
 9 vector<int> v;
10 
11 void dfs(int i){
12     if(result.size() == m){
13           for(auto& e:result){
14            cout << e << ' ';
15        }
16        cout <<endl;
17        return;
18     }else if(i == n){
19         return;
20     }
21     
22     result.push_back(v[i]);
23     dfs(i+1);
24     result.pop_back();
25    
26     dfs(i+1);
27 }
28 
29 
30 int main()
31 {
32     cin >> n >> m;
33     for(int i = 1;i <= n;i++){
34         v.push_back(i);
35     }
36     
37     dfs(0);
38 }
View Code

 

1~n 這 n 個整數排成一行後隨機打亂順序,輸出全部可能的次序。

輸入格式
一個整數n。

輸出格式
按照從小到大的順序輸出全部方案,每行1個。

首先,同一行相鄰兩個數用一個空格隔開。

其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面。

數據範圍
1≤n≤9
輸入樣例:
3
輸出樣例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 vector<int> v;
 7 
 8 int n ;
 9 
10 void dfs(int i, vector<int>& result){
11     if(i== n){
12         for(auto& e:result){
13            cout << e << ' ';
14        }
15        cout <<endl;
16        return;
17     }
18    
19    for(int j = 0; j < v.size();j++){
20        if(v[j] != 0){
21            result[i] = v[j];
22            v[j] = 0;
23            dfs(i+1,result);
24            v[j] =  result[i] ;
25        }
26    }
27 }
28 
29 int main()
30 {
31     cin >> n;
32     for(int i= 1; i<=n;i++){
33         v.push_back(i);
34     }
35     vector<int> result(n,0);
36     
37     dfs(0,result);
38     
39     return 0;
40 }
View Code
相關文章
相關標籤/搜索