陷入了思维误区,以为要用数组下标来记录牌的位置,看了别人的代码才发现是要用数组的值来记录牌的位置,转过这道弯之后就是道水题了
#include<iostream>
#include<cmath>
#include<cstring>
#define maxn 10+2
using namespace std;
int mapp[maxn],visit[maxn];
int re;
void dfs(int t,int sum)
{
if(t==9){re=min(re,sum);return;}
if(sum>re){return;}
for(int i=1;i<=10;i++)
{
if(!visit[i])
{
for(int j=i+1;j<=10;j++)
{
if(!visit[j])
{
int summ=sum+abs(mapp[j]-mapp[i]);
visit[i]=1;
dfs(t+1,summ);
break;
}
}
visit[i]=0;
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int x;
for(int i=1;i<=10;i++)
{
cin>>x;
mapp[x]=i;
}
re=1<<20;
memset(visit,0,sizeof(visit));
dfs(0,0);
cout<<re<<endl;
}
return 0;
}