#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int ans = 0;
int b[10]; // 亮暗与否
int vis[10];
queue<int> qq;
void bfs(int x) { // 对第x个二极管进行bfs搜索
qq.push(x);
vis[x] = 1;
while (!qq.empty()) {
int t = qq.front();
qq.pop();
for (int i = 0; i < 7; i++) {
if (b[i] && !vis[i] && a[t][i]) {
qq.push(i);
vis[i] = 1;
}
}
}
}
bool check(int x) { // 对第x种情况进行判断
// reset
for (int i = 0; i < 7; i++) {
vis[i] = 0;
}
// 二进制枚举
for (int i = 0; i < 7; i++) {
if (x & (1<<i)) {
b[i] = 1;
} else {
b[i] = 0;
}
}
int cnt = 0;
for (int i = 0; i < 7; i++) {
if (b[i] && !vis[i]) {
bfs(i);
cnt++; // 这就是在数连通块个数的核心思想
}
}
return cnt == 1;
}
int main()
{
// 请在此输入您的代码
a[0][1] = 1, a[0][5] = 1;
a[1][0] = 1, a[1][2] = 1, a[1][6] = 2;
a[2][1] = 1, a[2][3] = 1, a[2][6] = 1;
a[3][2] = 1, a[3][4] = 1;
a[4][3] = 1, a[4][5] = 1, a[4][6] = 1;
a[5][0] = 1, a[5][4] = 1, a[5][6] = 1;
a[6][1] = 1, a[6][2] = 1, a[6][4] = 1, a[6][5] = 1;
for (int i = 0; i < 128; i++) {
if (check(i)) {
ans++;
}
}
cout << ans;
return 0;
}
七段码(bfs数连通块的个数)
最新推荐文章于 2024-05-21 11:03:20 发布