Untitled
unknown
plain_text
2 years ago
2.1 kB
6
Indexable
#include<iostream>
using namespace std;
int q[6000]={0}, f=-1, r=-1;
int d[8][10]={{-1,0,1,0,0,-1,0,1},{-1,0,1,0,0,-1,0,1},{-1,0,1,0},{0,-1,0,1},{-1,0,0,1},{1,0,0,1},{1,0,0,-1},{-1,0,0,-1}};
int dsize[] = {8, 8, 4, 4, 4, 4, 4, 4};
int a[1000][1000]={0}, dd[1000][1000]={0};
void enqueue(int x, int y){
q[++r]=x; q[++r]=y;
}
int dequeue(){
return q[++f];
}
bool isEmpty(){
return f==r;
}
int main(){
ios::sync_with_stdio(false);
freopen("pipe.txt", "r", stdin);
int t, tc;
cin >> t;
for(int tc=1; tc<=t; tc++){
int n, m, gx, gy, li, ans = 0;
cin >> n >> m >> gx >> gy >> li;
f=-1; r=-1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >> a[i][j];
dd[i][j]=0;
}
}
enqueue(gx, gy); dd[gx][gy]=1;
int cur = 1;
while(!isEmpty()){
int x = dequeue(), y = dequeue();
for(int i=0;i<dsize[a[x][y]];i+=2){
int dx = d[a[x][y]][i], dy = d[a[x][y]][i+1];
int px = x + dx, py = y+dy;
if(px <0 || px >=n || py<0 || py>=m) continue;
else {
if(a[px][py]!=0 && dd[px][py] ==0){
bool connect=false;
int pipe = a[px][py];
for(int j=0; j<dsize[a[px][py]]; j+=2) {
if(d[pipe][j]==-dx && d[pipe][j+1]==-dy){
connect = true;
break;
}
}
if(connect){
dd[px][py]=dd[x][y]+1;
enqueue(px, py);
}
}
}
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m;j++)
if(dd[i][j]<=li && dd[i][j]>0) ans++;
}
cout << "Case #" << tc << "\n" << ans << endl;
}
}Editor is loading...