Untitled
unknown
plain_text
2 years ago
3.3 kB
10
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...