코딩/사소한 팁
배열에서 상하좌우 이동 간단한 코드
hoon222y
2016. 8. 4. 12:33
보통 dfs나 bfs를 하면 2차원 배열상에서 이동하는 경우가 생기는데 그때마다 같은 코드를 반복하지 않고 for문으로 해결할 수 있다.
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 | #include <iostream> #include <queue> using namespace std; //4방향 탐색 int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; int arr[100][100]; int N,M; queue<pair<int,int>> q; //범위를 벗어나는지 확인해주는 chk bool chk(int a,int b){ return 0<a && a<=N && 0<b && b <=M; } void bfs(){ int y = q.front().first; int x = q.front().second; q.pop(); //4방향 탐색을 위한 for문 for(int i=0;i<4;i++){ if(arr[y+dy[i]][x+dx[i]] == 1 && chk(y+dy[i],x+dx[i])){ q.push(make_pair(y+dy[i], x+dx[i])); } } } | cs |
[주의점]
1. chk을 통해서 해당 배열의 위치를 벗어나는지 확인
2. dx[],dy[] 배열에 이동할 좌표값을 넣어주고 (3차원일 경우 dz[] 추가) for문으로 간단히 계산