using namespace std;
int main()
{
int m;
int arr[10][10];
cin >> m;
for (int a = 0;a < m; a++)
{
int degree[10] = {0};
int dist[10][10];
int path[10][10];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
cin >> arr[i][j];
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
degree[i] += arr[i][j];
}
for (int i = 0; i < 10; i++)
dist[i][i] = 0;
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
if (arr[i][j] == 1)
dist[i][j] = degree[j];
else
dist[i][j] = 999999999;
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (arr[i][j] == 1)
path[i][j] = i;
}
}
for (int i = 0; i < 10; i++)
{
for (int k = 0; k < 10; k++)
{
for (int j = 0; j < 10; j++)
{
if (dist[i][j] > dist[i][k] + dist[k][j])
{
dist[i][j] = dist[i][k] + dist[k][j];
path[i][j] = path[k][j];
}
}
}
}
int End = 9;
int num[10] = {0};
for (int j = 0; j < 10; j++)
{
int node = path[0][End];
num[node] = 1;
End = node;
if (node == 0) {
break;
}
}
for (int i = 0;i < 10; i++)
if (num[i] != 0)
cout << i << "-";
cout << 9;
cout << " : " << dist[0][9] + degree[0] << endl;
}
return 0;
}
沒有留言:
張貼留言