1.纸牌三角形
1.1思路分析
将问题抽象出来,不要堪称是一个三角形,而是把三角形看成是一维数组。假设A是起点,那么就是形如A,2,3,4,5,6,7,8,9的一个数组,求排法的数量,很明显,就是让我们求满足要求的全排列,dfs(回溯)的退出条件就是凑够了9各数字,此时再判断三条边,如果都相等,那么说明满足等边三角形的要求,我们的count++;
注意:题目说明了旋转和镜像后的算同一种。已知,一个正三角形,他旋转能产生另外两个与原来相同的三角形(总共三个),镜像能产生总共两个,所以2*3=6,这个6就是我们最后求得的数值再/6就是结果
1.2代码
package com.iheima;import java.util.LinkedList;;public class Main3 {static LinkedList<Integer> list=new LinkedList<>();static int count=0;public static void main(String[] args) {boolean[] vis=new boolean[10];int[] arr=new int[10];for (int i = 1; i < arr.length; i++) {arr[i]=i;}vis[0]=true;dfs(arr,1,vis);// System.out.println(res);System.out.println(count/6);}public static void dfs(int[] arr,int start,boolean[] vis){if(list.size()==arr.length-1){int a=list.get(0)+list.get(1)+list.get(2)+list.get(3);int b=list.get(3)+list.get(4)+list.get(5)+list.get(6);int c=list.get(6)+list.get(7)+list.get(8)+list.get(0);if(a==b&&b==c){count++;return;}}for(int i=1;i<arr.length;i++){if(vis[i])continue;vis[i]=true;list.add(arr[i]);dfs(arr,start+1,vis);list.removeLast();vis[i]=false;}}}
