#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; } |