Untitled
unknown
plain_text
2 years ago
3.0 kB
3
Indexable
#include <iostream> #include<queue> #include<stdio.h> #define MAX_N 1002 using namespace std; int n, m; int a[MAX_N][MAX_N]; int b[MAX_N][MAX_N]; bool visited[MAX_N][MAX_N]; int x_start, y_start; int k; queue<int> q1, q2; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, -1, 1}; int main() { int t; cin >> t; while(t--){ cin >> m >> n >> x_start >> y_start >> k; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ cin >> a[i][j]; } } for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ visited[i][j] = false; b[i][j] = -1; } } visited[x_start][y_start] = true; b[x_start][y_start] = 1; q1.push(x_start); q2.push(y_start); while(!q1.empty()){ int i = q1.front(); int j = q2.front(); q1.pop(); q2.pop(); for (int k = 0; k < 4; k++){ int ii = i + dx[k]; int jj = j + dy[k]; if (ii >= 0 && ii < m && jj >= 0 && jj < n){ if (visited[ii][jj] || a[ii][jj] == 0) continue; if (a[i][j] == 1){ if (k == 0 && (a[ii][jj] == 3 || a[ii][jj] == 7 || a[ii][jj] == 4)) continue; if (k == 1 && (a[ii][jj] == 3 || a[ii][jj] == 5 || a[ii][jj] == 6)) continue; if (k == 2 && (a[ii][jj] == 2 || a[ii][jj] == 7 || a[ii][jj] == 6)) continue; if (k == 3 && (a[ii][jj] == 2 || a[ii][jj] == 5 || a[ii][jj] == 4)) continue; } if (a[i][j] == 2){ if (k == 3 || k == 2) continue; if (k == 0 && (a[ii][jj] == 3 || a[ii][jj] == 7 || a[ii][jj] == 4)) continue; if (k == 1 && (a[ii][jj] == 3 || a[ii][jj] == 5 || a[ii][jj] == 6)) continue; } if (a[i][j] == 3){ if (k == 1 || k == 0) continue; if (k == 2 && (a[ii][jj] == 2 || a[ii][jj] == 7 || a[ii][jj] == 6)) continue; if (k == 3 && (a[ii][jj] == 2 || a[ii][jj] == 5 || a[ii][jj] == 4)) continue; } if (a[i][j] == 4){ if (k == 1 || k == 2) continue; if (k == 0 && (a[ii][jj] == 3 || a[ii][jj] == 7)) continue; if (k == 3 && (a[ii][jj] == 2 || a[ii][jj] == 5)) continue; } if (a[i][j] == 5){ if (k == 0 || k == 2) continue; if (k == 1 && (a[ii][jj] == 3 || a[ii][jj] == 6)) continue; if (k == 3 && a[ii][jj] == 2 || a[ii][jj] == 4) continue; } if (a[i][j] == 6){ if (k == 0 || k == 3) continue; if (k == 1 && (a[ii][jj] == 3 || a[ii][jj] == 5)) continue; if (k == 2 && (a[ii][jj] == 2 || a[ii][jj] == 7)) continue; } if (a[i][j] == 7){ if (k == 1 || k == 3) continue; if (k == 0 && (a[ii][jj] == 3 || a[ii][jj] == 4)) continue; if (k == 2 && (a[ii][jj] == 2 || a[ii][jj] == 6)) continue; } visited[ii][jj] = true; b[ii][jj] = b[i][j] + 1; q1.push(ii); q2.push(jj); } } } int res = 0; for (int i = 0; i < m; i++){ //cout << endl; for (int j = 0; j < n; j++){ //cout << b[i][j] << " "; if(b[i][j] > 0 && b[i][j] <= k) res++; } } cout << res << endl; } }
Editor is loading...
Leave a Comment