Untitled
unknown
plain_text
2 years ago
2.3 kB
4
Indexable
#include <iostream> using namespace std; #define MAX_SIZE 10000000 int front = -1; int rear = -1; int Arx[MAX_SIZE]; int Ary[MAX_SIZE]; int Index[MAX_SIZE]; int xbgin, ybgin, xend, yend; class queue { public: bool isEmpty(); void enqueue(int arx, int ary, int index); void dequeue(); void peek(int &arx, int &ary, int &index); }; bool queue :: isEmpty() { if(front == rear) { return true; } return false; } void queue :: enqueue(int arx, int ary, int index) { front++; Arx[front] = arx; Ary[front] = ary; Index[front] = index; } void queue :: dequeue() { rear++; } void queue :: peek(int &arx, int &ary, int &index) { arx = Arx[rear + 1]; ary = Ary[rear + 1]; index = Index[rear + 1]; } int N, M; int arr[51][51]; int ard[51][51]; void reset(int ar[51][51]) { for(int i = 0; i < 51; i++) { for(int j = 0; j < 51; j++) { ar[i][j] = 0; } } } int dx[] = { -1, 0, 0, 1}; int dy[] = { 0, 1, -1, 0}; int abs(int s) { int k = 0 - s; if(k > 0) { return k; } return s; } void BFS(int x1, int y1, int kc) { queue qe; reset(ard); int index = 1; ard[x1][y1] = 1; qe.enqueue(x1, y1, index); while(!qe.isEmpty()) { int x, y; qe.peek(x, y, index); qe.dequeue(); for(int i = 1; i <= kc; i++) { for(int j = 0; j < 4; j++) { int t = x + i * dx[j]; int k = y + dy[j]; if(t >= 0 && t < N && k >= 0 && k < M) { if(arr[t][k] != 0 && ard[t][k] == 0) { ard[t][k] = 1; qe.enqueue(t, k, index); } } } } } } int main() { int testcase; cin >> testcase; for(int tc = 1; tc <= testcase; tc++) { cin >> N >> M; reset(arr); reset(ard); for(int i = 0; i < N; i++) { for(int j = 0; j < M; j++) { cin >> arr[i][j]; if(arr[i][j] == 2) { xbgin = i; ybgin = j; } else if(arr[i][j] == 3) { xend = i; yend = j; } } } int ctt = 0; for(int i = 1; i <= N; i++) { front = rear = -1; BFS(xbgin, ybgin, i); if(ard[xend][yend] == 1) { ctt = i; break; } } cout<<"Case #"<<tc<<endl<<ctt<<endl; } }
Editor is loading...