Untitled
unknown
plain_text
2 years ago
2.0 kB
4
Indexable
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #define MAX 21 int A[MAX], B[MAX], map[MAX][MAX], visited[MAX]; int N, M; int ans; struct Position { int x; }; class Queue { int front, rear; Position arr[2000000]; public: Queue() { front = 0; rear = 0; }; void push(Position val) { arr[rear++] = val; }; Position pop() { return arr[front++]; }; bool isEmpty() { return front == rear; }; void reset() { front = 0; rear = 0; } }; Queue q; void resetV() { for (int j = 1; j <= M; j++) { visited[j] = 0; } } int bfsDi(int N, int map[MAX][MAX], int start) { resetV(); int count = 0; q.reset(); Position positionPush = { start }; q.push(positionPush); visited[start] = 1; while (!q.isEmpty()) { Position positionPop = q.pop(); count++; for (int i = 1; i <= N; i++) { if (map[positionPop.x][i] == 1 && visited[i] == 0) { Position positionPush = { i }; q.push(positionPush); visited[i] = 1; if (visited[2] == 1) { return count; break; } } } } } int bfsVe(int N, int map[MAX][MAX], int end) { resetV(); int count = 0; q.reset(); Position positionPush = { end }; q.push(positionPush); visited[end] = 1; while (!q.isEmpty()) { Position positionPop = q.pop(); count++; for (int i = 1; i <= N; i++) { if (map[i][positionPop.x] == 1 && visited[i] == 0) { Position positionPush = { i }; q.push(positionPush); visited[i] = 1; if (visited[1] == 1) { return count; break; } } } } } void init() { for (int i = 1; i <= M; i++) { for (int j = 1; j <= M; j++) { map[i][j] = 0; visited[j] = 0; } } } int main() { freopen("input.txt", "r", stdin); int T; cin >> T; for (int i = 1; i <= T; i++) { cin >> N >> M; init(); for (int i = 1; i <= M; i++) { cin >> A[i]; cin >> B[i]; } for (int j = 1; j <= M; j++) { map[A[j]][B[j]] = 1; } int minDi = bfsDi(N, map,1); int minVe = bfsVe(N, map,2); cout << minDi + minVe << endl; } return 0; }
Editor is loading...
Leave a Comment