/*蜘蛛牌是windows xp操做系統自帶的一款紙牌遊戲,遊戲規則是這樣的:只能將牌拖到比她大一的牌上面(A最小,K最大),若是拖動的牌上有按順序排好的牌時,那麼這些牌也跟着一塊兒移動,遊戲的目的是將全部的牌按同一花色從小到大排好,爲了簡單起見,咱們的遊戲只有同一花色的10張牌,從A到10,且隨機的在一行上展開,編號從1到10,把第i號上的牌移到第j號牌上,移動距離爲abs(i-j),如今你要作的是求出完成遊戲的最小移動距離。 Input 第一個輸入數據是T,表示數據的組數。 每組數據有一行,10個輸入數據,數據的範圍是[1,10],分別表示A到10,咱們保證每組數據都是合法的。 Output 對應每組數據輸出最小移動距離。 Sample Input 1 1 2 3 4 5 6 7 8 9 10 Sample Output 9*/
import java.util.*; public class Main { static boolean[] vis; static int[] p; static int min; static void dfs(int step,int dis) { if (dis>=min) return; if(step==9) { min = dis; return; } for(int i=1;i<10;i++) { if(vis[i]) continue; vis[i] = true; for(int j=i+1;j<=10;j++) { if(vis[j]) continue; dfs(step+1, dis+Math.abs(p[i]-p[j])); break; } vis[i] = false; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int t = scanner.nextInt(); while(t-->0) { vis = new boolean[15]; p = new int[15]; for(int i=1;i<=10;i++) { int num = scanner.nextInt(); p[num] = i; } min = 10000000; dfs(0,0); System.out.println(min); } } }