Advertisement

UVa 1572 自组合 (Self-Assembly)

阅读量:

题目
存在n种带有标记的正方形,其边具有特定标识。每条边的标识形式为一个大写字母后接加号或减号,或者为数字00。仅当两条边的字母相同且符号相反时,它们才可拼接;而包含00的边则无法与任何其他边拼接。
假定输入的每种正方形均可无限使用,并且允许进行旋转和翻转,任务是判断是否可以构建出一个无限扩展的结构,其中每条边要么处于悬空状态,要么与符合上述拼接规则的边相邻。

要点

  • 连接性分析:需要判断是否存在能够形成循环路径的边,即能否构造出环状结构。为此可在有向图中检测是否存在环路,通常采用拓扑排序的方法进行判定。由于系统中仅有52条不同的边(不包括00),因此若存在00,则必然无法形成环状结构。
复制代码
    #include<bits/stdc++.h>
    using namespace std;
    
    //分别代表 A- B- C- D- E- F- G- ………… A+ B+ C+
    int G[52][52];
    int vis[52];
    
    bool dfs(int i) {
    vis[i] = -1; //正在访问
    for(int j = 0; j < 52; j++) {
        if(G[i][j]) {
            if(vis[j] == -1) 

全部评论 (0)

还没有任何评论哟~