先从12个数中搜索出5个组合数,然后判断是否相邻即可
#include<iostream>
using namespace std;
//dire[1]代表和数字1相连的所有四个数字(少于四个的用0表示)
int dire[13][4]={
0,0,0,0,
2,5,0,0,
1,3,6,0,
2,4,7,0,
3,8,0,0,
1,6,9,0,
2,5,7,10,
3,6,8,11,
4,7,12,0,
5,10,0,0,
6,9,11,0,
7,10,12,0,
8,11,0,0,
};
int tmp[15];
set<int>s;
int ans;
void dfs(int x,int step)
{
if(step==5)
{
s.clear();
int flag=1;
for(int i=1;i<=5;i++)
{
for(int j=0;j<4;j++)
s.insert(dire[tmp[i]][j]);
}
for(int i=1;i<=5;i++)
{
if(s.count(tmp[i]!=1)){
flag=0;break;
}
}
if(flag)ans++;
}
for(int i=x+1;i<=12;i++)
{
tmp[step+1]=i;
dfs(i,step+1);
}
}
int main()
{
dfs(0,0);
cout<<ans<<endl;
return 0;
}