#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
double dp[
6][
6][
6][
6][
6][
6][
6][
6][
6];
bool vis[
6][
6][
6][
6][
6][
6][
6][
6][
6];
vector<
char> vv[
10];
double d(
int w1,
int w2,
int w3,
int w4,
int w5,
int w6,
int w7,
int w8,
int w9)
{
if(vis[w1][w2][w3][w4][w5][w6][w7][w8][w9])
return dp[w1][w2][w3][w4][w5][w6][w7][w8][w9];
vis[w1][w2][w3][w4][w5][w6][w7][w8][w9]=
1;
int a[
10]=
{w1,w2,w3,w4,w5,w6,w7,w8,w9};
double &x=
dp[w1][w2][w3][w4][w5][w6][w7][w8][w9];
int flag=
0;
for(
int i=
0; i<
9; i++
)
{
if(a[i]!=
0) flag=
1;
}
if(flag==
0)
return x=
1.0;
else
{
int kk=
0;
for(
int i=
0; i<
9; i++
)
if(a[i])
{
for(
int j=i+
1; j<
9; j++
)
{
if(a[j]&&vv[i+
1][a[i]-
1]==vv[j+
1][a[j]-
1])
{
kk++
;
a[i]--
;
a[j]--
;
x+=d(a[
0],a[
1],a[
2],a[
3],a[
4],a[
5],a[
6],a[
7],a[
8]);
a[i]++
;
a[j]++
;
}
}
}
if(x==
0)
return 0;
else
{
x=x/(kk*
1.0);
return x;
}
}
}
void init()
{
memset(dp,0,
sizeof(dp));
memset(vis,0,
sizeof(vis));
for(
int i=
0;i<=
10;i++
)
vv[i].clear();
}
char s1[
5],s2[
5],s3[
5],s4[
5];
int main()
{
while(~scanf(
"%s%s%s%s",&s1,&s2,&s3,&
s4))
{
init();
vv[1].push_back(s1[
0]);
vv[1].push_back(s2[
0]);
vv[1].push_back(s3[
0]);
vv[1].push_back(s4[
0]);
for(
int i=
2; i<=
9; i++
)
{
scanf("%s%s%s%s",&s1,&s2,&s3,&
s4);
vv[i].push_back(s1[0]);
vv[i].push_back(s2[0]);
vv[i].push_back(s3[0]);
vv[i].push_back(s4[0]);
}
double mm=d(
4,
4,
4,
4,
4,
4,
4,
4,
4);
printf("%lf\n",mm);
}
return 0;
}
转载于:https://www.cnblogs.com/Wangwanxiang/p/8407235.html
转载请注明原文地址: https://win8.8miu.com/read-1495679.html