《宽搜》hdoj acm 4.3.3

#include<stdio.h>
#include<math.h>
int vis[11],p[11],max,step; void dfs(int x) { if(x==10) {
		max=step; return; } int i,j; for(i=1;i<11;i++) { if(!vis[i]) { for(j=i+1;j<11;j++) { if(!vis[j]) {
					step+=abs(p[i]-p[j]); if(step<max) {                                
						vis[i]=1;
						dfs(x+1);
						vis[i]=0; }
					step-=abs(p[i]-p[j]); break; } } } } } int main() { int t,a,i;
    scanf("%d",&t); while(t--) { for(i=1;i<=10;i++) {
			scanf("%d",&a);
			p[a]=i;
			vis[i]=0; }
		max=100000;
		step=0;
		dfs(1);
		printf("%d\n",max); } }

你可能感兴趣的:(《宽搜》hdoj acm 4.3.3)