纸牌三角形java dfs

标题:纸牌三角形

A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。

       A
      9 6
     4   8
    3 7 5 2

这样的排法可能会有很多。

如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
注意:需要提交的是一个整数,不要提交任何多余内容。

package 第五次模拟测试;

public class 纸牌三角形 {
    
    
	static int arr[]=new int[10];
	static boolean vis[]=new boolean[10];
	static int sum=0;
	static void dfs(int step) {
    
    
		if(step==10)
		{
    
    
			if(arr[1]+arr[2]+arr[3]+arr[4]==arr[4]+arr[5]+arr[6]+arr[7]&&
			arr[7]+arr[8]+arr[9]+arr[1]==arr[4]+arr[5]+arr[6]+arr[7])
				sum++;
			return;
		}
		for(int i=1;i<=9;i++)
		{
    
    
			if(!vis[i]) {
    
    
				vis[i]=true;
				arr[step]=i;
				dfs(step+1);
				vis[i]=false;
			}
		}
	}
	public static void main(String[] args) {
    
    
		dfs(1);
		System.out.println(sum/6);//这里其实是count/3/2,除以3是排除了旋转,除以2是排除了镜像
	}
}

纸牌三角形

    可以用数组表示,分别表示为三条边     arr[1]+arr[2]+arr[3]+arr[4]
    arr[7]+arr[8]+arr[9]+arr[1]
    arr[4]+arr[5]+arr[6]+arr[7]
判断是否相等,注意镜像和旋转
所以总和要/6

猜你喜欢

转载自blog.csdn.net/weixin_45079974/article/details/104849426