【七段码数码管的连通性检查】

文章介绍了如何使用邻接矩阵和深度优先搜索算法来判断一组选定的数码管是否连通,通过构建数码管间的连接关系并进行遍历检查其连通性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目分析

给定一组选用的数码管,要求判断这些数码管是否连通。连通的定义是:所有选用的数码管中的发光二极管必须构成一个连通的图,即从任意一个发光的二极管出发,可以到达其他所有发光的二极管。

思路与算法

  1. 构建数码管的邻接矩阵:由于七段码数码管中的二极管之间存在连接关系,可以用一个哈希表(unordered_map)来表示数码管的邻接关系。其中,键为每个二极管的标记,值为与之相邻的二极管的标记。
  2. 使用DFS进行搜索:从选用的数码管中的第一个二极管开始,使用深度优先搜索算法遍历所有与之相邻的二极管,并标记为已访问。通过这种方式,我们可以检查所有发光的二极管是否构成了一个连通的图。
  3. 检查连通性:遍历所有选用的数码管,如果有任何一个数码管未被访问到,则说明选用的数码管不连通;否则,选用的数码管是连通的。

代码

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>

using namespace std;

string selection;  // 选用的数码管

// 定义七段码数码管的邻接关系
unordered_map<char, vector<char>> segments = {
    {'a', {'b', 'f'}},
    {'b', {'a', 'c', 'g'}},
    {'c', {'g', 'd', 'b'}},
    {'d', {'c', 'e'}},
    {'e', {'d', 'f', 'g'}},
    {'f', {'a', 'e', 'g'}},
    {'g', {'f', 'b', 'e', 'c'}}
};

// 深度优先搜索函数,用于检查数码管是否连通
void dfs(char node, unordered_map<char, bool>& visited) {
    visited[node] = true;
    for (char neighbor : segments[node]) {
        if (!visited[neighbor] && find(selection.begin(), selection.end(), neighbor) != selection.end()) {
            dfs(neighbor, visited);
        }
    }
}

int main() {
    cin >> selection;

    unordered_map<char, bool> visited; // 记录数码管是否被访问过
    // 初始化visited
    for (char segment : selection) {
        visited[segment] = false;
    }

    // 从第一个选用的数码管开始进行深度优先搜索
    dfs(selection[0], visited);

    // 检查是否所有选用的数码管都连通
    bool connected = true;
    for (char segment : selection) {
        if (!visited[segment]) {
            connected = false;
            break;
        }
    }

    if (connected) {
        cout << "yes" << endl;
    } else {
        cout << "no" << endl;
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wdwc2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值