Untitled
unknown
plain_text
a year ago
2.4 kB
9
Indexable
#include <iostream> using namespace std; int T, n, m, xst, yst, xen, yen, map[500][500], visit[500][500]; int tmpx, tmpy, tx, ty, front, rear, qx[50000], qy[50000], dir[500][500]; int possible, minRotate; void resetVisit() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { visit[i][j] = 0; dir[i][j] = 0; } } } void initQueue() { front = rear = -1; } int isEmpty() { return front == rear; } void enQueue(int x, int y) { qx[++rear] = x; qy[rear] = y; } void deQueue(int& tmpx, int& tmpy) { tmpx = qx[++front]; tmpy = qy[front]; } int isValid() { return tx > 0 && tx <= n && ty > 0 && ty <= m && map[tx][ty] == 0; } int dx[4] = { -1, 0, 1, 0 }; int dy[4] = { 0, 1, 0, -1 }; void BFS(int x, int y) { initQueue(); resetVisit(); dir[x][y] = -1; visit[x][y] = 1; enQueue(x, y); while (!isEmpty()) { deQueue(tmpx, tmpy); if (tmpx == xen && tmpy == yen) { possible = 1; minRotate = visit[tmpx][tmpy] < minRotate ? visit[tmpx][tmpy] : minRotate; } for (int k = 0; k < 4; k++) { tx = tmpx + dx[k]; ty = tmpy + dy[k]; if (isValid()) { int temp = dir[tmpx][tmpy]; if (!visit[tx][ty]) { if (temp == k) { dir[tx][ty] = temp; visit[tx][ty] = visit[tmpx][tmpy]; enQueue(tx, ty); } else { dir[tx][ty] = k; visit[tx][ty] = visit[tmpx][tmpy] + 1; enQueue(tx, ty); } } else { if (temp == k) { if (visit[tmpx][tmpy] < visit[tx][ty]) { visit[tx][ty] = visit[tmpx][tmpy]; dir[tx][ty] = temp; enQueue(tx, ty); } } else { if (visit[tmpx][tmpy] + 1 < visit[tx][ty]) { visit[tx][ty] = visit[tmpx][tmpy] + 1; dir[tx][ty] = k; enQueue(tx, ty); } } } } } } } int main() { cin >> T; for (int tc = 1; tc <= T; tc++) { cin >> m >> n; cin >> yst >> xst >> yen >> xen; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { char c; cin >> c; if (c == '1') map[i][j] = 1; else map[i][j] = 0; dir[i][j] = 0; } } possible = 0; minRotate = 1000000; cout << "Case #" << tc << endl; BFS(xst, yst); if (possible) cout << minRotate - 2 << endl; else cout << -1<< endl; } return 0; }
Editor is loading...
Leave a Comment