急求。。。
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=1001;
const int maxp=17;
const int INF=1<<29;
struct node{int a,b;}ico[maxn];
int f[maxp][maxp][maxp],v[maxp][maxp],N,ans;
inline bool cmp(struct node x,struct node y){return x.a<x.b;}
inline int getint(){
int d=0,flag=0; char ch=' ';
while(!isdigit(ch=getchar()))if(ch=='-')break;
if(ch=='-')flag=1;else d=ch-48;
while(isdigit(ch=getchar()))d=d*10+ch-48;
if(flag)return -d;else return d;
}
inline void search(int i,int j,int k,int l){
if(l>N){if(f[i][j][k]<ans)ans=f[i][j][k];}
else{int m=ico[l].b;
if(f[m][j][k]>=f[i][j][k]+v[i][m]){
f[m][j][k]=f[i][j][k]+v[i][m];
search(m,j,k,l+1);
}
if(f[i][m][k]>=f[i][j][k]+v[j][m]){
f[i][m][k]=f[i][j][k]+v[j][m];
search(i,m,k,l+1);
}
if(f[i][j][m]>=f[i][j][k]+v[k][m]){
f[i][j][m]=f[i][j][k]+v[k][m];
search(i,j,m,l+1);
}
}
}
int main(){int t;scanf("%d",&t);
while(t--){
scanf("%d",&N);ans=(1<<31)-1;
for(int i=1;i<=N;i++)ico[i].a=getint(),ico[i].b=getint();
for(int i=1;i<=16;i++)
for(int j=1;j<=16;j++){
v[i][j]=getint();
for(int k=1;k<=16;k++)f[i][j][k]=INF;
}f[1][1][1]=0;
sort(ico+1,ico+1+N,cmp);
search(1,1,1,1);
printf("%d\n",ans);
}
return 0;
}