Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
grid.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3/// @brief グリッド操作用関数
4struct GridUtil {
5 const vector<int> dx={0,1,0,-1,1,1,-1,-1};
6 const vector<int> dy={1,0,-1,0,1,-1,1,-1};
7
8 int h,w;
9 GridUtil(int h, int w): h(h),w(w) {}
10
11 int index(int x, int y) { return x*w+y; }
12 pair<int,int> pos(int idx) { return {idx/w, idx%w}; }
13 bool in(int x, int y) { return 0<=x && x<h && 0<=y && y<w; }
14
15 vector<pair<int,int>> around4(int x, int y) {
16 vector<pair<int,int>> ret;
17 for(int i=0; i<4; i++) {
18 int nx=x+dx[i], ny=y+dy[i];
19 if(in(nx,ny)) ret.push_back({nx,ny});
20 }
21 return ret;
22 }
23
24 vector<pair<int,int>> around2(int x, int y) {
25 vector<pair<int,int>> ret;
26 for(int i=0; i<2; i++) {
27 int nx=x+dx[i], ny=y+dy[i];
28 if(in(nx,ny)) ret.push_back({nx,ny});
29 }
30 return ret;
31 }
32
33 vector<pair<int,int>> around8(int x, int y) {
34 vector<pair<int,int>> ret;
35 for(int i=0; i<8; i++) {
36 int nx=x+dx[i], ny=y+dy[i];
37 if(in(nx,ny)) ret.push_back({nx,ny});
38 }
39 return ret;
40 }
41
42 vector<int> around4(int i) {
43 vector<int> ret;
44 int x=i/w, y=i%w;
45 for(int j=0; j<4; j++) {
46 int nx=x+dx[j], ny=y+dy[j];
47 if(in(nx,ny)) ret.push_back(index(nx,ny));
48 }
49 return ret;
50 }
51
52 vector<int> around2(int i) {
53 vector<int> ret;
54 int x=i/w, y=i%w;
55 for(int j=0; j<2; j++) {
56 int nx=x+dx[j], ny=y+dy[j];
57 if(in(nx,ny)) ret.push_back(index(nx,ny));
58 }
59 return ret;
60 }
61
62 vector<int> around8(int i) {
63 vector<int> ret;
64 int x=i/w, y=i%w;
65 for(int j=0; j<8; j++) {
66 int nx=x+dx[j], ny=y+dy[j];
67 if(in(nx,ny)) ret.push_back(index(nx,ny));
68 }
69 return ret;
70 }
71
72 bool is_even(int x, int y) { return (x+y)%2==0; }
73
74 vector<int> operator()(int i) { return around4(i); }
75 vector<pair<int,int>> operator()(int x, int y) { return around4(x,y); }
76};
グリッド操作用関数
Definition grid.hpp:4
GridUtil(int h, int w)
Definition grid.hpp:9
vector< pair< int, int > > around4(int x, int y)
Definition grid.hpp:15
int index(int x, int y)
Definition grid.hpp:11
vector< int > around4(int i)
Definition grid.hpp:42
vector< pair< int, int > > around8(int x, int y)
Definition grid.hpp:33
int w
Definition grid.hpp:8
vector< int > around8(int i)
Definition grid.hpp:62
const vector< int > dx
Definition grid.hpp:5
bool in(int x, int y)
Definition grid.hpp:13
vector< pair< int, int > > around2(int x, int y)
Definition grid.hpp:24
vector< int > operator()(int i)
Definition grid.hpp:74
vector< pair< int, int > > operator()(int x, int y)
Definition grid.hpp:75
pair< int, int > pos(int idx)
Definition grid.hpp:12
int h
Definition grid.hpp:8
bool is_even(int x, int y)
Definition grid.hpp:72
vector< int > around2(int i)
Definition grid.hpp:52
const vector< int > dy
Definition grid.hpp:6