标签:
陷入了思维误区,以为要用数组下标来记录牌的位置,看了别人的代码才发现是要用数组的值来记录牌的位置,转过这道弯之后就是道水题了
#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; }
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/45154353