显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
int n,d[10][10],minn,m,c,ans=100000000;
int main()
{
freopen("asm_lis.in","r",stdin);
freopen("asm_lis.out","w",stdout);
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=1000000;
if(n==2)
{
for(int i=1;i<=m;i++)
{
int u,v,s;
cin>>u>>v>>s;
d[u][v]=min(d[u][v],s);
}
ans=min(ans,d[1][2]+c);
ans=min(ans,d[2][1]+c);
ans=min(ans,2*c);
ans=min(ans,d[1][2]+d[2][1]);
cout<<ans;
}
if(n==3)
{
for(int i=1;i<=m;i++)
{
int u,v,s;
cin>>u>>v>>s;
d[u][v]=min(d[u][v],s);
}
ans=min(ans,d[1][2]+d[2][3]+c);
ans=min(ans,d[1][2]+d[2][1]+c);
ans=min(ans,d[3][2]+d[2][3]+c);
ans=min(ans,d[1][3]+d[3][1]+c);
ans=min(ans,d[3][2]+d[2][1]+c);
ans=min(ans,d[1][3]+d[3][2]+c);
ans=min(ans,d[2][3]+d[3][1]+c);
ans=min(ans,d[2][1]+d[1][3]+c);
ans=min(ans,d[3][1]+d[1][2]+c);
ans=min(ans,d[2][1]+2*c);
ans=min(ans,d[1][2]+2*c);
ans=min(ans,d[1][3]+2*c);
ans=min(ans,d[3][1]+2*c);
ans=min(ans,d[2][3]+2*c);
ans=min(ans,d[3][2]+2*c);
ans=min(ans,3*c);
ans=min(ans,d[1][2]+d[2][3]+d[3][1]);
ans=min(ans,d[2][1]+d[1][3]+d[3][2]);
cout<<ans<<endl;
}
if(n==4)
{
for(int i=1;i<=m;i++)
{
int u,v,s;
cin>>u>>v>>s;
d[u][v]=min(d[u][v],s);
}
ans=min(ans,d[1][2]+d[2][3]+d[3][4]+c);
ans=min(ans,d[1][2]+d[2][4]+d[4][3]+c);
ans=min(ans,d[1][3]+d[3][2]+d[2][4]+c);
ans=min(ans,d[1][4]+d[4][2]+d[2][3]+c);
ans=min(ans,d[1][4]+d[4][3]+d[3][2]+c);
ans=min(ans,d[1][2]+d[2][4]+d[4][3]+c);
ans=min(ans,d[1][3]+d[3][4]+d[4][2]+c);
ans=min(ans,d[2][3]+d[3][1]+d[1][4]+c);
ans=min(ans,d[2][3]+d[3][4]+d[4][1]+c);
ans=min(ans,d[2][1]+d[1][3]+d[3][4]+c);
ans=min(ans,d[2][1]+d[1][4]+d[4][3]+c);
ans=min(ans,d[2][4]+d[4][1]+d[1][3]+c);
ans=min(ans,d[2][4]+d[4][3]+d[3][1]+c);
ans=min(ans,d[3][1]+d[1][2]+d[2][4]+c);
ans=min(ans,d[3][1]+d[1][4]+d[4][2]+c);
ans=min(ans,d[3][2]+d[2][4]+d[4][1]+c);
ans=min(ans,d[3][2]+d[2][1]+d[1][4]+c);
ans=min(ans,d[3][4]+d[4][1]+d[1][2]+c);
ans=min(ans,d[3][4]+d[4][2]+d[2][1]+c);
//-------------------------------------
ans=min(ans,d[1][2]+d[2][3]+2*c);
ans=min(ans,d[3][2]+d[2][1]+2*c);
ans=min(ans,d[1][3]+d[3][2]+2*c);
ans=min(ans,d[2][3]+d[3][1]+2*c);
ans=min(ans,d[2][1]+d[1][3]+2*c);
ans=min(ans,d[3][1]+d[1][2]+2*c);
ans=min(ans,d[1][2]+d[2][4]+2*c);
ans=min(ans,d[4][2]+d[2][1]+2*c);
ans=min(ans,d[1][4]+d[4][2]+2*c);
ans=min(ans,d[2][4]+d[4][1]+2*c);
ans=min(ans,d[2][1]+d[1][4]+2*c);
ans=min(ans,d[4][1]+d[1][2]+2*c);
ans=min(ans,d[4][2]+d[2][3]+2*c);
ans=min(ans,d[3][2]+d[2][4]+2*c);
ans=min(ans,d[4][3]+d[3][2]+2*c);
ans=min(ans,d[2][3]+d[3][4]+2*c);
ans=min(ans,d[2][4]+d[4][3]+2*c);
ans=min(ans,d[3][4]+d[4][2]+2*c);
ans=min(ans,d[1][4]+d[4][3]+2*c);
ans=min(ans,d[3][4]+d[4][1]+2*c);
ans=min(ans,d[1][3]+d[3][4]+2*c);
ans=min(ans,d[4][3]+d[3][1]+2*c);
ans=min(ans,d[4][1]+d[1][3]+2*c);
ans=min(ans,d[3][1]+d[1][4]+2*c);
//-----------------------------
ans=min(ans,d[1][4]+3*c);
ans=min(ans,d[1][2]+3*c);
ans=min(ans,d[1][3]+3*c);
ans=min(ans,d[3][1]+3*c);
ans=min(ans,d[3][4]+3*c);
ans=min(ans,d[3][2]+3*c);
ans=min(ans,d[2][1]+3*c);
ans=min(ans,d[2][4]+3*c);
ans=min(ans,d[2][3]+3*c);
ans=min(ans,d[4][1]+3*c);
ans=min(ans,d[4][2]+3*c);
ans=min(ans,d[4][3]+3*c);
ans=min(ans,4*c);
ans=min(ans,d[1][2]+d[2][3]+d[3][4]+d[4][1]);
ans=min(ans,d[4][3]+d[3][2]+d[2][1]+d[1][4]);
//--------------------------------
ans=min(ans,d[1][2]+d[2][1]+2*c);
ans=min(ans,d[3][2]+d[2][3]+2*c);
ans=min(ans,d[1][3]+d[3][1]+2*c);
ans=min(ans,d[4][1]+d[1][4]+2*c);
ans=min(ans,d[2][4]+d[4][2]+2*c);
ans=min(ans,d[3][4]+d[4][3]+2*c);
//--------------------------------
cout<<ans<<endl;
}
}