#include <bits/stdc++.h>
using namespace std;
void printMatrix(const vector<vector<int>> &matrix, const int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%2d ", matrix[i][j]);
}
printf("\n");
}
}
int calculateMaxPath(vector<vector<int>> &m, const int n) {
int result = 1;
for (int k = 0; k < n; k++) {
// cout << "k=" << k << endl;
// printMatrix(m, n);
for (int i = 0; i < n; i++) {
if (i == k) { //
continue;
}
for (int j = 0; j < n; j++) {
// int col = m[i][k];
// int row = m[k][j];
// int val = m[i][j];
// if (j == k || i == j || row == -1 || col == -1) {
if (j == k || i == j || m[i][k] == -1 || m[k][j] == -1) {
continue;
}
// int val2 = m[i][k] + m[k][j];
m[i][j] =
m[i][j] < 0 ?
m[i][k] + m[k][j] :
min(m[i][j], m[i][k] + m[k][j]);
result = max(result, m[i][j]);
}
}
}
return result;
}
void findSolutin(const vector<vector<int>> &matrix, const int n) {
vector<std::vector<int>> modified1 = matrix;
int result = n;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (i == j) {
continue;
}
vector<std::vector<int>> modified = matrix;
modified[i][j] = 0;
modified[j][i] = 0;
result = min(result, calculateMaxPath(modified, n));
}
}
// printMatrix(matrix, n);
// printMatrix(modified, n);
cout << result << endl;
}
int main() {
// ifstream cin("tests/0a.in");
// ifstream cin("tests1/tel1.in");
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int t;
cin >> t;
for (int test = 0; test < t; test++) {
int n;
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n));
string s;
for (int i = 0; i < n; i++) {
cin >> s;
for (int j = 0; j < n; j++) {
matrix[i][j] = s[j] == '1' ? 1 : -1; // INT_MAX;
}
matrix[i][i] = 0;
}
// printMatrix(matrix, n);
findSolutin(matrix, n);
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <bits/stdc++.h> using namespace std; void printMatrix(const vector<vector<int>> &matrix, const int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%2d ", matrix[i][j]); } printf("\n"); } } int calculateMaxPath(vector<vector<int>> &m, const int n) { int result = 1; for (int k = 0; k < n; k++) { // cout << "k=" << k << endl; // printMatrix(m, n); for (int i = 0; i < n; i++) { if (i == k) { // continue; } for (int j = 0; j < n; j++) { // int col = m[i][k]; // int row = m[k][j]; // int val = m[i][j]; // if (j == k || i == j || row == -1 || col == -1) { if (j == k || i == j || m[i][k] == -1 || m[k][j] == -1) { continue; } // int val2 = m[i][k] + m[k][j]; m[i][j] = m[i][j] < 0 ? m[i][k] + m[k][j] : min(m[i][j], m[i][k] + m[k][j]); result = max(result, m[i][j]); } } } return result; } void findSolutin(const vector<vector<int>> &matrix, const int n) { vector<std::vector<int>> modified1 = matrix; int result = n; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (i == j) { continue; } vector<std::vector<int>> modified = matrix; modified[i][j] = 0; modified[j][i] = 0; result = min(result, calculateMaxPath(modified, n)); } } // printMatrix(matrix, n); // printMatrix(modified, n); cout << result << endl; } int main() { // ifstream cin("tests/0a.in"); // ifstream cin("tests1/tel1.in"); cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); int t; cin >> t; for (int test = 0; test < t; test++) { int n; cin >> n; vector<vector<int>> matrix(n, vector<int>(n)); string s; for (int i = 0; i < n; i++) { cin >> s; for (int j = 0; j < n; j++) { matrix[i][j] = s[j] == '1' ? 1 : -1; // INT_MAX; } matrix[i][i] = 0; } // printMatrix(matrix, n); findSolutin(matrix, n); } return 0; } |
English