#include <stdio.h>
#include <string.h>
int Answer, N, sum;
int map[13][13];
int visited[13];
void dfs(int v, int k)
{
int i;
if(k == N && map[v][1] > 0)
{
if(sum + map[v][1] < Answer)
{
Answer = sum + map[v][1];
}
return;
}
for(i = 2; i <= N; i++)
{
if(visited[i] == 0 && map[v][i] > 0)
{
if(sum + map[v][i]> Answer)
{
continue;
}
visited[i] = 1;
++k;
sum += map[v][i];
dfs(i, k);
sum -= map[v][i];
visited[i] = 0;
k--;
}
}
}
int main(void)
{
int T, test_case;
int i, j, k;
//freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
scanf("%d", &T);
for(test_case = 0; test_case < T; test_case++)
{
scanf("%d", &N);
for(i = 1; i <= N; i++)
{
for(j = 1; j <= N; j++)
{
scanf("%d", &map[i][j]);
}
}
memset(visited, 0, sizeof(visited));
Answer = 0x7fffffff;
k = 1; sum = 0;
dfs(1, k);
// Print the answer to standard output(screen).
printf("Case #%d\n", test_case+1);
printf("%d\n", Answer);
}
return 0;
}
dfs穷举
最新推荐文章于 2024-02-23 11:48:00 发布