码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-10-18 17:13:14      阅读:40      评论:0      收藏:0      [点我收藏+]

标签:turn   art   mes   pre   names   ima   src   思路   lang   

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

思路
二进制枚举+检测连通,信誓旦旦地交了个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;
}

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

标签:turn   art   mes   pre   names   ima   src   思路   lang   

原文地址:https://www.cnblogs.com/wdt1/p/13835562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!