状态压缩 np问题
时间复杂度:(1<<n)*n
java 代码
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] arr=new int[n][n];
//读取数组
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arr[i][j]=sc.nextInt();
}
}
int[][] f=new int[1<<n+1][n];
//初始化
for(int i=0;i<1<<n+1;i++){
for(int j=0;j<n;j++) f[i][j]=0x3f3f3f3f;//无穷大
}
f[1][0]=0;
for(int i=2;i<1<<n;i++)
for(int j=0;j<n;j++)
if((i>>j&1)==1)
for(int k=0;k<n;k++)
if((i-(1<<j)>>k&1)==1)
f[i][j]=Math.min(f[i][j],f[i-(1<<j)][k]+arr[k][j]);
System.out.println(f[(1<<n)-1][n-1]);
}
}