import java.util.*;
class lklk {
private int[][] edges;
private int[] used;
private int[] cols;
private int[] best;
private int max;
private int tempnum;
public lklk(int[][] edges, int m) {
this.edges = edges;
this.used = new int[edges.length];
this.cols = new int[m];
this.best = new int[m];
for (int i = 1; i <= m; i++) {
this.cols[i - 1] = i;
}
this.max = Integer.MAX_VALUE;
this.tempnum = 0;
}
public boolean isname(int color, int dian) {
for (int i = 0; i < edges.length; i++) {
if (i == dian) {
continue;
}
if (used[i] == used[dian]) {
return false;
}
}
return true;
}
public void dfs(int i) {
if (i > edges.length - 1) {
if (tempnum < max) {
max = tempnum;
for (int k = 0; k < edges.length; k++) {
best[k] = used[k];
}
}
} else {
for (int j = 0; j < cols.length; j++) {
used[i] = cols[j];
if (isname(cols[j], i)) {
tempnum += edges[i][j];
dfs(i + 1);
tempnum -= edges[i][j];
}
used[i] = 0;
}
}
}
public void display() {
for (int k = 0; k < edges.length; k++) {
System.out.print(best[k] + " ");
}
System.out.println(max);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int person = in.nextInt();
in.nextLine();
int[][] arr = new int[person][person];
for (int i = 0; i < person; i++) {
String[] input = in.nextLine().split(" ");
for (int j = 0; j < input.length; j++) {
int temp = Integer.parseInt(input[j]);
arr[i][j] = temp;
}
}
lklk test = new lklk(arr, person);
test.dfs(0);
test.display();
}
}
点个关注呗!