• b_lq_七段码(二进制枚举+连通性检测)



    求这个灯管的发光样式种类,发光的部分需连在一起

    思路
    二进制枚举+检测连通,信誓旦旦地交了个69;事后发现建图的时候少建了一条边,分没了

    #include<bits/stdc++.h>
    using namespace std;
    const int N=8;
    int vis[N], light[N];
    vector<int> g[N];
    void dfs(int u) {
        vis[u]=1;
        for (int v : g[u]) if (!vis[v] && light[v])
            dfs(v);
    }
    bool valid(int sta) {
        string s;
        while (sta || s.size()<7) {
            s=to_string(sta&1)+s;
            sta>>=1;
        }
        memset(light, false, sizeof light);
        int start=0, n=s.size();
        for (int i=0; i<n; i++) if (s[i]=='1')
            start=n-i, light[start]=1;
        memset(vis,false,sizeof vis);
        dfs(start);
        for (int i=1; i<=7; i++) if (light[i] && !vis[i]) return false;
        return true;
    }
    void init_G() {
        g[1].push_back(2),g[2].push_back(1);    
        g[2].push_back(3),g[3].push_back(2);    
        g[3].push_back(4),g[4].push_back(3);    
        g[4].push_back(5),g[5].push_back(4);
        g[5].push_back(6),g[6].push_back(5);
        g[6].push_back(7),g[7].push_back(6);
        
        g[2].push_back(7),g[7].push_back(2);    
        g[3].push_back(7),g[7].push_back(3); 
        g[5].push_back(7),g[7].push_back(5);     
        g[1].push_back(6),g[6].push_back(1); //对,就缺了这条边
    }
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        init_G();
        int tot=1<<7, ans=0;
        for (int i=1; i<tot; i++) if (valid(i))
            ans++;
        cout<<ans;
        return 0;
    }
    

    好吧,这本是一道拉开差距的题目,然儿在我即将收入囊中时,它...

  • 相关阅读:
    JMM内存模型
    APUE习题8.7
    整型和字符数组之间的转换(略带进制的转化)
    数据结构学习——shell排序的C语言实现
    Unix环境高级编程学习笔记——fcntl
    Unix环境高级编程学习笔记——dup
    链表
    计算机数值表示
    整数位运算相关操作
    win和linux下控制台界面中停顿X秒的方式
  • 原文地址:https://www.cnblogs.com/wdt1/p/13835562.html
Copyright © 2020-2023  润新知