1 条题解

  • 1
    @ 2024-11-23 19:31:57

    思路:dfs+记录路径。

    注意:这里叙述一下dfs与bfs记录路径的不同之处。

    dfs:记录路径只需要一个普通数组,因为dfs可以返回。

    bfs:需要在结构体里开数组,因为bfs的每一步都会产生一个新的组合。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    #define FastIO ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
    
    struct node{
        int v[5];
    }e[25];
    int vis[25], mp[25];
    int m, kk = 0;
    
    void dfs(int x, int t) {
        if(x == m && t) {
            if(t != 20) return ;
            kk ++;
            cout << kk << ":  " << m << " ";
            for(int i = 1; i <= 20; i ++) {
                cout << mp[i] << " ";
            }
            cout << endl;
            return ;
        }
    
        for(int i = 1; i <= 3; i ++) {
            if(!vis[e[x].v[i]]) {
                vis[e[x].v[i]] = 1;
                mp[t + 1] = e[x].v[i];
                dfs(e[x].v[i], t + 1);
                vis[e[x].v[i]] = 0;
            }
        }
    }
    
    void solve() {
        for(int i = 1; i <= 20; i ++) {
            cin >> e[i].v[1] >> e[i].v[2] >> e[i].v[3];
        }
        while(cin >> m) {
            if(!m) break;
            memset(vis, 0, sizeof(0));
            dfs(m, 0);
        }
    }
    
    signed main() {
        FastIO;
    
        int _T_ = 1;
        // cin >> _T_;
    
        while(_T_ --) solve();
        return 0;
    }
    
    • 1

    信息

    ID
    1081
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    2
    上传者