다익스트라였던가

#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
#define tt tuple<int, int, int, int , int>
#define pp pair<int, int>
#define fIO ios_base::sync_with_stdio(false); \
cin.tie(NULL);
 
using namespace std;
 
int T;
 
int RR[4] = {0, 0, 1, -1};
int CC[4] = {1, -1, 0, 0};
 
int main(void)
{
    fIO
    cin >> T;
 
    while(T--)
    {
        int c, r, p, tc, tr, count = 0;
        cin >> c >> r >> p;
 
        vector<vector<int>> A(r, vector<int>(c, 0));             //배추의 위치
        vector<vector<int>> vis(r, vector<int>(c, 0));           //방문처리
 
        for(int i = 0; i < p; i++)
        {
            cin >> tc >> tr;
            A[tr][tc] = 1;
        }
        for(int i = 0; i < r; i++)
        {
            for(int j = 0; j < c; j++)
            {
                if(!vis[i][j] && A[i][j]) //만약 방문하지 않았거나 무언가있다면 즉 1이라면
                {
                    count ++;
                    vis[i][j] = 1;
 
                    queue<pp> q;
                    q.emplace(i, j);
 
                    while(!q.empty())
                    {
                        auto& [cr, cc] = q.front(); q.pop();
 
                        for(int i = 0; i < 4; i++)
                        {
                            int nr = cr + RR[i];
                            int nc = cc + CC[i];
 
                            if(
                                nc >= 0 && nr < r &&
                                nc >= 0 && nc < c &&
                                vis[nr][nc] == 0 &&
                                A[nr][nc] == 1
                            ) {
                                q.emplace(nr, nc);
                                vis[nr][nc] = 1;
                            }
                        }
                    }
                }
            }
        }
 
        cout << count <<'\n';
    }
    return 0;
}