题目大意:可重复访问顶点的TSP问题。
解法:点击打开链接
坑点:n=1
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 17
#define inf 0x3f3f3f3f
int Map[maxn][maxn],dp[maxn][1<<maxn|1],n;
void floyd()
{
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j]=Map[i][k]+Map[k][j];
}
int main()
{
int T,x,y,z,i,j,k,m;
cin>>T;
while(T--)
{
scanf("%d%d",&n,&m);
memset(Map,inf,sizeof(Map));
for(i=0;i<m;++i){
scanf("%d%d%d",&x,&y,&z);
if(z<Map[x][y]) Map[x][y]=Map[y][x]=z;
}
floyd();
memset(dp,inf,sizeof(dp));
dp[1][1]=0;