#include "worldmap.h"
#include <algorithm>
#include <iostream>
#include <functional>
#include <utility>
#include <cmath>
#include <cassert>
std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
std::vector<std::vector<int>> adj_matrix(N+1, std::vector<int>(N+1, 0));
std::vector<std::vector<int>> hist_matrix(N+1, std::vector<int>(N+1, 0));
for (int i=0; i<M; i++)
adj_matrix[A[i]][B[i]] =
adj_matrix[B[i]][A[i]] =
hist_matrix[A[i]][B[i]] =
hist_matrix[B[i]][A[i]] = 1;
std::vector<std::vector<int>> grid;
auto fill = [&](std::vector<int>& path) {
if (path.size() == 0) path.push_back(1);
std::vector<int> ans;
for (int x: path) ans.push_back(x);
for (int i=path.size(); i<2*N; i++) {
ans.push_back(path[path.size()-1]);
}
std::reverse(ans.begin(), ans.end());
grid.push_back(ans);
};
std::function<void(int)> dfs;
std::vector<int> visited(N+1, 0), path;
dfs = [&](int u) {
visited[u] = 1;
path.push_back(u); path.push_back(u);
fill(path);
for (int v=1; v<=N; v++) {
if (adj_matrix[u][v] && !visited[v]) {
adj_matrix[u][v] =
adj_matrix[v][u] = 0;
dfs(v);
}
}
path.pop_back(); path.pop_back();
fill(path);
}; dfs(1);
std::function<void(int, int)> resolve = [&](int u, int v) {
for (int pt=0; pt<grid.size(); pt++)
for (int i=0; i<grid[pt].size() && grid[pt].front() == v; i+=2)
if (grid[pt][i] == u && grid[pt][i+1] == u) {
if (i+2 >= grid[pt].size()) {
grid[pt][i+1] = v;
return;
} else if (grid[pt][i+2] != u && hist_matrix[grid[pt][i+2]][v]) {
grid[pt][i+1] = v;
return;
} else {
grid[pt][i+1] = v;
grid[pt][i+2] = u;
return;
}
}
std::swap(u, v);
for (int pt=0; pt<grid.size(); pt++)
for (int i=0; i<grid[pt].size() && grid[pt].front() == v; i+=2)
if (grid[pt][i] == u && grid[pt][i+1] == u) {
if (i+2 >= grid[pt].size()) {
grid[pt][i+1] = v;
return;
} else if (grid[pt][i+2] != u && hist_matrix[grid[pt][i+2]][v]) {
grid[pt][i+1] = v;
return;
} else {
grid[pt][i+1] = v;
grid[pt][i+2] = u;
return;
}
}
};
for (int i=1; i<=N; i++)
for (int j=i+1; j<=N; j++)
if (adj_matrix[i][j]) {
adj_matrix[i][j] =
adj_matrix[j][i] = 0;
resolve(i, j);
}
}
컴파일 시 표준 에러 (stderr) 메시지
worldmap.cpp: In function 'std::vector<std::vector<int> > create_map(int, int, std::vector<int>, std::vector<int>)':
worldmap.cpp:87:1: warning: no return statement in function returning non-void [-Wreturn-type]
87 | }
| ^
# | 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... |