蓝桥杯 剪邮票(组合数搜索)

    xiaoxiao2021-03-25  14

    先从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; }

    转载请注明原文地址: https://ju.6miu.com/read-300373.html

    最新回复(0)