#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
vector<vi> create_map(int n, int m, vi a, vi b) {
const int K = 2 * n; // kích thước lưới (an toàn với n <= 15)
vector<vi> grid(K, vi(K, 0));
vector<pair<int, int>> pos(n + 1, {-1, -1});
int r = 0, c = 0;
// Bước 1: đặt mỗi quốc gia vào 1 ô riêng biệt
for (int i = 1; i <= n; i++) {
grid[r][c] = i;
pos[i] = {r, c};
c++;
if (c == K) c = 0, r++;
}
// Bước 2: tạo tiếp giáp cho các cặp liên kết
int dr[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
for (int i = 0; i < m; i++) {
int u = a[i], v = b[i];
bool found = false;
// tìm ô đã có màu u
for (int x = 0; x < K && !found; x++) {
for (int y = 0; y < K && !found; y++) {
if (grid[x][y] != u) continue;
// tìm ô trống xung quanh để đặt v
for (int d = 0; d < 4; d++) {
int nx = x + dr[d], ny = y + dc[d];
if (nx >= 0 && nx < K && ny >= 0 && ny < K) {
if (grid[nx][ny] == 0) {
grid[nx][ny] = v;
found = true;
break;
} else if (grid[nx][ny] == v) {
found = true;
break;
}
}
}
}
}
// nếu chưa đặt được, gán đại v vào ô trống
if (!found) {
for (int x = 0; x < K && !found; x++) {
for (int y = 0; y < K && !found; y++) {
if (grid[x][y] == 0) {
grid[x][y] = v;
found = true;
}
}
}
}
}
return grid;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |