七段码--dfs+set去重/状压
1.dfs遍历i相连的边,从亮1个到7个遍历,然后最后答案用·二进制装进set里,set自动去重
2.c表示现在亮的个数,d表示要求亮的个数,pos表现在是哪个点
蓝桥账户中心
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> pii;
set<int> an;
vector<int> a[15];
int b[15];
bool bo[15];
void dfs(int pos,int c,int d)
{if(c==d){int x=0;for(int i=1;i<=c;i++){cout<<b[i]<<"/";x|=(1<<(b[i]-1));}an.insert(x);cout<<endl;}else{for(int v:a[pos]){ if(!bo[v]){b[c+1]=v;bo[v]=true;dfs(v,c+1,d); bo[v]=false;}}}
}
void solve()
{a[1].push_back(2);a[1].push_back(6);a[2].push_back(1);a[2].push_back(3);a[2].push_back(7);a[3].push_back(2);a[3].push_back(4);a[3].push_back(7);a[4].push_back(3);a[4].push_back(5);a[5].push_back(4);a[5].push_back(6);a[5].push_back(7);a[6].push_back(7);a[6].push_back(1);a[6].push_back(5);a[7].push_back(2);a[7].push_back(3);a[7].push_back(5);a[7].push_back(6);for(int i=1;i<=7;i++){for(int d=1;d<=7;d++){b[1]=i;bo[i]=true;dfs(i,1,d);bo[i]=false;}}cout<<an.size();
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cout<<80;//solve();return 0;
}