题目
有n种边上带标号的正方形。每条边要么为一个大写字母后面跟一个加号或者减号,要么为数字00。并且仅当两条边的字母相同且符号相反时,两条边能够拼在一起,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) {
//cout << i << "*" << j << endl;
return f