防爆搜索解决方案hdu1572下沙面(2)
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int cnt,ans,n,a[7],vis[1010],g[1010][1010];
void in()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>g[i][j];
cin>>n;
cnt=0;
memset(vis,0,sizeof(vis));
while(n--)
{
cin>>a[cnt];
if(!vis[a[cnt]])
{
vis[a[cnt]]=1;
cnt++;
}
}
ans=10000;
memset(vis,0,sizeof(vis));
}
void dfs(int s,int w,int step)
{
if(step==cnt)
{
ans=min(ans,w);
return;
}
for(int i=0;i<cnt;i++)
{
if(!vis[a[i]])
{
vis[a[i]]=1;
dfs(a[i],w+g[s][a[i]],step+1);
vis[a[i]]=0;
}
}
}
int main()
{
while(cin>>n&&n!=0)
{
in();
dfs(0,0,0);
cout<<ans<<endl;
}
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
浙公网安备 33010602011771号