您的位置:首页 > Web前端 > CSS

2015-年蓝桥杯C-(A组)赛题-dfs-手链样式

2018-03-27 22:55 357 查看
手链样式

小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?

请你提交该整数。不要填写任何多余的内容或说明性的文字。
#include <iostream>
#include <map>
#include <vector>
#include <set>
#include <cstdlib>
#include <string>
#include <string.h>
#include <math.h>

int a[15];

using namespace std;
int sum=0;
int b[5]={0,3,4,5};
int c[5];

set<string> ss;

bool panduan(){
int i,j;
string s="";
string s2="";
char ch[10];
char ch2[10];
for(j=1;j<=12;j++){
s="";
s2="";
for(i=j;i!=(13-j)/12*12+j-1;i=i%12+1){
itoa(a[i],ch,10);
itoa(a[13-i],ch2,10);
s=s+ch;
s2=s2+ch2;
}
itoa(a[i],ch,10);
itoa(a[13-i],ch2,10);
s=s+ch;
s2=s2+ch2;

if(ss.count(s)!=0)return false;
if(ss.count(s2)!=0)return false;
}
s="";
for(j=1;j<=12;j++){
itoa(a[j],ch,10);
s=s+ch;
}

ss.insert(s);
return true;

}
void dfs(int n){

if(n>12){
if(panduan())sum++;
return;
}

for(int j=1;j<=3;j++){

if(c[j]<=b[j]-1){
a
=j;
c[j]++;
dfs(n+1);
a
=0;
c[j]--;
}

}
}

int main(){
memset(a,0,sizeof(a));
memset(c,0,sizeof(a));
ss.clear();
dfs(1);
cout<<sum<<endl;
return 0;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: