#include<bits/stdc++.h>
using namespace std;
vector<vector<int>>v(8);
vector<int>temp,t;
vector<vector<int>>sum;
bool b[8];
void dfs(int a){
//cout<<a<<endl;
b[a]=1;
temp.push_back(a);
int i=0;
for(;i<v[a].size();++i){
if(b[v[a][i]]==0){
dfs(v[a][i]);
temp.pop_back();
b[v[a][i]]=0;
}
}
if(i==v[a].size()){
t=temp;
/* for(int j=0;j<t.size();++j)
cout<<t[j];
cout<<endl;*/
sort(t.begin(),t.end());
sum.push_back(t);
return;
}
}
int main()
{
v[1].push_back(6); v[1].push_back(2);
v[2].push_back(1); v[2].push_back(7); v[2].push_back(3);
v[3].push_back(7); v[3].push_back(2); v[3].push_back(4);
v[4].push_back(5); v[4].push_back(3);
v[5].push_back(4); v[5].push_back(7);v[5].push_back(6);
v[6].push_back(1); v[6].push_back(5);v[6].push_back(7);
v[7].push_back(2); v[7].push_back(5);v[7].push_back(6);v[7].push_back(3);
/*
dfs(1);
for(int i=1;i<=7;++i)
cout<<b[i]<<" ";
*/
for(int i=1;i<=7;++i){
temp.clear();
dfs(i);
b[i]=0;
}
/*
for(int i=0;i<sum.size();++i){
for(int j=0;j<sum[i].size();++j){
cout<<sum[i][j];
}
cout<<endl;
}*/
set<vector<int>>se;
for(int i=0;i<sum.size();++i){
se.insert(sum[i]);
}
cout<<se.size()<<endl;
}
用sort进行排序,同一些字符的不同排列将会被确定为从小到大。最后用集合set来排除相同组合的,得到答案。