题意:有n个开关和m盏灯,给定一个矩阵a,若a[i][j]==1则说明开关i与第j盏灯连接.初始时所有灯都是关闭的.按下某开关后,所有与这个开关连接的灯将会打开,已经打开的不会关闭.
现在你需要去掉一个开关,使得按下剩余n−1个开关后,所有灯都可以打开.若存在方案,则输出YES,否则输出NO.
思路:存下每个开关可以控制的灯,存下每个灯可以被多少个开关控制,然后暴力枚举去掉每一个开关,如果去掉某个开关后,所有的灯还是都可以被打开,那么就是YES。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
int n, m;
vector<int> G[MAXN];
map<int, int> mp;
int main()
{
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
{
char s[2005]; scanf("%s", s);
for (int j = 0; j < m; j++)
{
if (s[j] == '1')
{
G[i].push_back(j);
mp[j]++;
}
}
}
bool flag = false;
for (int i = 0; i < n; i++)
{
bool flag2 = true;
for (int j = 0; j < G[i].size(); j++)
{
if (mp[G[i][j]] - 1 == 0) { flag2 = false; break; }
}
if (flag2) { flag = true; break; }
}
if (flag) printf("YES\n");
else printf("NO\n");
return 0;
}
本文介绍了一个涉及开关控制灯泡的问题,通过使用C++实现一种算法来判断移除一个开关后是否能确保所有灯都能被点亮。该算法首先记录每个开关控制的灯的状态,并统计每个灯受多少个开关控制,接着通过枚举方式确定可行方案。
1970

被折叠的 条评论
为什么被折叠?



