dfs ```c++ #include <iostream> using namespace std; const int N = 20; int q[N]; int n; bool judge() { for(int i = 0; i < n; i++) { if(q[i] != 1) return false; } return true; } bool st; int cnt, res = 1e6; void dfs(int u) { //u表示当前正在操作的u个灯泡,有两种情况,按下或者不按 //首先判断是否已经全为1了。 if(judge()) { st = true; res = min(res, cnt); return; } if(u == n) { //按完了灯泡,返回  return; } //不按第u个灯泡 dfs(u + 1); //按下第u个灯泡 q[u] = !q[u]; q[(u + 1) % n] = !q[(u + 1) % n]; q[(u - 1 + n) % n] = !q[(u - 1 + n) % n]; cnt++; dfs(u + 1); //恢复现场  q[u] = !q[u]; q[(u + 1) % n] = !q[(u + 1) % n]; q[(u - 1 + n) % n] = !q[(u - 1 + n) % n]; cnt--; } int main() { cin >> n; for(int i = 0; i < n; i++) cin >> q[i]; dfs(0); if(!st) res = -1;  cout << res; return 0; } ```