Untitled
unknown
plain_text
3 years ago
3.3 kB
19
Indexable
#include<iostream>
#define MAX_QUEUE 100000
using namespace std;
int N,M,P;
int map[51][51];
int visit[51][51];
int x_hugo, y_hugo;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int lienkettong[4][4] = {{1,2,5,6},{1,3,6,7},{1,2,4,7},{1,3,4,5}};
int ans;
class Queue
{
int front;
int rear;
int A[MAX_QUEUE];
public:
Queue();
bool is_Empty();
void enQueue(int inValue);
int deQueue();
void reset();
private:
};
Queue::Queue()
{
front = rear = -1;
}
bool Queue::is_Empty(){
if(front == rear)
return 1;
return 0;
}
void Queue::enQueue(int inValue){
rear++;
A[rear] = inValue;
}
int Queue::deQueue(){
front++;
return A[front];
}
void Queue::reset(){
front = rear = -1;
}
Queue pos;
void BFS(){
pos.reset();
pos.enQueue(x_hugo);
pos.enQueue(y_hugo);
visit[x_hugo][y_hugo] = 1;
int x,y;
while(!pos.is_Empty()){
ans++;
x = pos.deQueue();
y = pos.deQueue();
int xx,yy;
for (int i = 0; i < 4; i++){
xx = x + dx[i];
yy = y + dy[i];
if(xx >= 0 && xx < N && yy >= 0 && yy < M && visit[xx][yy] == 0 && visit[x][y] < P){
if(map[x][y] == 1){ // ong 1
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 2 && (i == 0 || i == 2)){ // ong 2
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 3 && (i == 1 || i == 3)){ // ong 3
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 4 && (i == 0 || i == 1)){ // ong 4
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 5 && (i == 1 || i == 2)){ // ong 5
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 6 && (i == 2 || i == 3)){ // ong 6
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
else if(map[x][y] == 7 && (i == 0 || i == 3)){ // ong 7
for (int j = 0; j < 4; j++){
if(lienkettong[i][j] == map[xx][yy]){
pos.enQueue(xx);
pos.enQueue(yy);
visit[xx][yy] = visit[x][y] + 1;
}
}
}
}
}
}
}
int main(){
freopen("input.txt","r",stdin);
int T;
cin >> T;
for (int tc = 1; tc <= T; tc++){
cin >> N >> M >> x_hugo >> y_hugo >> P;
for (int i = 0; i < N; i++){
for (int j = 0; j < M; j++){
cin >> map[i][j];
visit[i][j] = 0;
}
}
ans = 0;
BFS();
cout << "Case #" << tc << endl << ans << endl;
}
return 0;
}
Editor is loading...