当前位置: 代码迷 >> Java相关 >> 求解两道排列组上算法题
  详细解决方案

求解两道排列组上算法题

热度:217   发布时间:2016-04-22 21:50:40.0
求解两道排列组合算法题
1.正六面体染色
  正六面体用4种颜色染色。
  共有多少种不同的染色样式?
  要考虑六面体可以任意旋转、翻转。
  
   参考答案:
  240


2.排座位
  要安排:3个A国人,3个B国人,3个C国人坐成一排。
  要求不能使连续的3个人是同一个国籍。
  求所有不同方案的总数?
  
   参考答案:
  283824


数学解法和JAVA编程解法都可以。只要答案对。求解!
算法 排列组合 JAVA

------解决方案--------------------

public class Test3
{
static int kinds=0;
static int b[]=new int[10];
static boolean vis[]=new boolean[10];
public static void main(String[] args)
{
int a[]=new int[]{0,1,1,1,2,2,2,3,3,3};
dfs(1,a);
System.out.println("kinds:"+kinds);
}
static void dfs(int start,int a[])
{
if(start==a.length)
{
kinds++;
}
else
{
for(int i=1;i<a.length;i++)
{
if(!vis[i])
{
b[start]=a[i];
if(start>2 && b[start-2]==b[start-1] && b[start-1]==b[start]) continue;
vis[i]=true;
dfs(start+1,a);
vis[i]=false;
}
}
}
}
}
//kinds:283824

------解决方案--------------------
第1题 Burnside引理,参考维基百科上的公式,http://en.wikipedia.org/wiki/Burnside%27s_lemma
(n^6 + 3*n^4 + 12*n^3 + 8*n^2)/24,令n=4即可

第2题 容斥原理(包含排斥原理)
9! - 7!*6*3 + 5!*6*6*3 - 3!*6*6*6
  相关解决方案