7562

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
using namespace std;
	
int t, l;

int dx[8] = { 1,2,2,1,-1,-2,-2,-1 };
int dy[8] = { 2,1,-1,-2,-2,-1,1,2 };

int map[300][300];
int check[300][300];
int visited[300][300];
queue<pair<int, int>> q;

void BFS(int target_x,int target_y) {
	while (!q.empty()) {
		int x = q.front().first;
		int y = q.front().second;
		visited[x][y] = 1;
		q.pop();
		if (x == target_x && y == target_y) {
			cout << check[x][y] << '\\n';
			return;
		}

		for (int i = 0; i < 8; i++) {
			int next_x = x + dx[i];
			int next_y = y + dy[i];

			if (next_x >= 0 && next_x < l
				&& next_y >= 0 && next_y < l
				&& visited[next_x][next_y] == 0) {
				visited[next_x][next_y] = 1;
				check[next_x][next_y] = check[x][y] + 1;
				q.push({ next_x,next_y });
			}
		}
	}
}

int main() {
	cin >> t;
	while (t--) {
		cin >> l;
		int night_x, night_y;
		int target_x, target_y;
		cin >> night_x >> night_y;
		cin >> target_x >> target_y;

		q.push({ night_x,night_y });
		BFS(target_x,target_y);

		for (int i = 0; i < 300; i++) {
			for (int j = 0; j < 300; j++) {
				check[i][j] = 0;
				visited[i][j] = 0;
			}
		}
		while (!q.empty())
			q.pop();
	}
	
	return 0;
}

24479

#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cmath>
#define P pair<int, int>
#define F first
#define S second
#define LL long long int 

using namespace std;

int N, M, R;
vector<int> connect[100001];
int check[100001];
int Cnt[100001];
int cnt = 1;

void dfs(int node){
    check[node] = 1;
    Cnt[node] = cnt++;
    for(int i = 0; i < connect[node].size(); i++){
        int x = connect[node][i];
        if(check[x] == 0){
            dfs(x);
        }
    }
}

void solve(){
    for(int i = 1; i <= N; i++){
        sort(connect[i].begin(), connect[i].end());
    }
    dfs(R);
    for(int i = 1; i <= N; i++){
        cout << Cnt[i] << "\\n";
    }
}

int main() {
    cin.tie(0);
    cout.tie(0);
    cin >> N >> M >> R;
    for(int i = 1; i <= M; i++){
        int x, y;
        cin >> x >> y;
        connect[x].push_back(y);
        connect[y].push_back(x);
    }
    solve();
    return 0;
}

24444

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdio>

using namespace std;

int N, M, K;
vector<int> connect[100001];
int check[100001];

void bfs(int start){
    int Visit = 1;
    queue<int> q;
    q.push(start);
    check[start] = Visit++;
    while(!q.empty()){
        int x = q.front();
        q.pop();
        for(int i = 0; i < connect[x].size(); i++){
            int xx = connect[x][i];
            if(check[xx] == 0){
                check[xx] = Visit++;
                q.push(xx);
            }
        }
    }
}

void solve(){
    for(int i = 1; i <= N; i++){
        sort(connect[i].begin(), connect[i].end());
    }
    bfs(K);
    for(int i = 1; i <= N; i++){
        cout << check[i] << "\\n";
    }
}

int main() {
    cin.tie(0);
    cout.tie(0);
    cin >> N >> M >> K;
    for(int i = 1; i <= M; i++){
        int x, y;
        cin >> x >> y;
        connect[x].push_back(y);
        connect[y].push_back(x);
    }
    solve();
    return 0;
}