1 条题解
-
0Guest LV 0 MOD
-
0
Very thanks to Dicboust!
#include <bits/stdc++.h>
using namespace std;
int n,ans=99999999;
int s[16][16];
int f[1<<16][16];
int Min(int x,int y)
{
if(x==-1) return y;
if(y==-1) return x;
return x<y? x:y;
}
main()
{
int i,j,k;
cin>>n;
n++;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>s[i][j];
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
s[i][j]=min(s[i][j],s[i][k]+s[k][j]);
memset(f,-1,sizeof(f));
f[1][0]=0;
for(i=1;i<(1<<n);i++)
for(j=0;j<n;j++)
if(f[i][j]!=-1)
for(k=0;k<n;k++)
if(!(i&(1<<k)))
{
f[i|(1<<k)][k]=Min(f[i|(1<<k)][k],f[i][j]+s[j][k]);
if((i|(1<<k))==(1<<n)-1)
ans=min(ans,f[i|(1<<k)][k]+s[k][0]);
}
cout<<ans;
return 0;
}
Randle
#include<bits/stdc++.h>
inline const void read(int &a)
{
a=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')
{
a=(a<<1)+(a<<3)+c-'0';
c=getchar();
}
}
int n,len[16][16],dis[16][1<<16];
bool in_que[16][1<<16];
struct queue
{
int que[100000],cond[100000],start,end;
inline const void init(){start=0;end=-1;}
inline const bool empty(){if(start>end)return true;return false;}
inline const void push(int a,int b){que[++end]=a;cond[end]=b;}
inline const void pop(){in_que[que[start]][cond[start]]=false;start++;}
inline const int front_que(){return que[start];}
inline const int front_cond(){return cond[start];}
}path;
void spfa()
{
while(!path.empty())
{
int k=path.front_que(),p=path.front_cond();
if(dis[0][p]>dis[k][p]+len[k][0])
{
dis[0][p]=dis[k][p]+len[k][0];
if(!in_que[0][p])
{
path.push(0,p);
in_que[0][p]=true;
}
}
for(int i=1;i<=n;i++)
{
if(dis[i][p|1<<i-1]>dis[k][p]+len[k][i])
{
dis[i][p|(1<<i-1)]=dis[k][p]+len[k][i];
if(!in_que[i][p|(1<<i-1)])
{
path.push(i,p|(1<<i-1));
in_que[i][p|(1<<i-1)]=true;
}
}
}
path.pop();
}
}
int main()
{
path.init();
memset(in_que,false,sizeof(in_que));
read(n);
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)read(len[i][j]);
memset(dis,0x7f,sizeof(dis));
dis[0][0]=0;path.push(0,0);in_que[0][0]=true;
spfa();
std::cout<<dis[0][(1<<n)-1];
return 0;
}
- 1
信息
- 难度
- 7
- 分类
- (无)
- 标签
- (无)
- 递交数
- 30
- 已通过
- 8
- 通过率
- 27%
- 上传者