简单的DFS,也没什么可以剪枝的,就直接按照模板写就行了
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int visit[11],s[11],flg,x,t;
void dfs(int count,int sum){
if(sum >= flg) return ;
if(count == 9){
flg = sum;
return ;
}
for(int i = 1;i<=9;i++){
if(visit[i] == 1)
continue;
visit[i] = 1;
for(int j = i+1;j<=10;j++){
if(visit[j] == 1)
continue;
dfs(count+1,sum+abs(s[i]-s[j]));
break;
}
visit[i] = 0;
}
}
int main(){
scanf("%d",&t);
while(t--){
for(int i = 1;i<=10;i++){
scanf("%d",&x);
s[x] = i;
}
memset(visit,0,sizeof(visit));
flg = 1000;
dfs(0,0);
printf("%d\n",flg);
}
return 0;
}