#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef map<int,int> mii;
typedef map<ll,ll> mll;
typedef unordered_map<ll,ll> umll;
typedef set<ll> sl;
typedef unordered_set<ll> usl;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vpii> vvpii;
typedef vector<vpll> vvpll;
typedef vector<vvi> vvvi;
typedef vector<vvl> vvvl;
map<int,map<int,int>> M;
vector<vector<int>> V;
int n,m,k;
int con=0;
void espiral(int i,int j,int a,int valor){
    M[i][j]=1;
    if(con>=n*m-1){
        return;
    }
    if(i>=0 && i<n && j>=0 && j<m){
        V[i][j]=min(V[i][j],valor);
        con++;
    }
    if(a==0){
        if(M[i][j+1]==0){
            espiral(i,j+1,1,valor+1);
            return;
        }else{
            espiral(i-1,j,0,valor+1);
            return;
        }
    }else if(a==1){
        if(M[i+1][j]==0){
            espiral(i+1,j,2,valor+1);
            return;
        }else{
            espiral(i,j+1,1,valor+1);
        }
    }else if(a==2){
        if(M[i][j-1]==0){
            espiral(i,j-1,3,valor+1);
        }else{
            espiral(i+1,j,2,valor+1);
        }
    }else{
        if(M[i-1][j]==0){
            espiral(i-1,j,0,valor+1);
        }else{
            espiral(i,j-1,3,valor+1);
        }
    }
}
void espiral2(int i, int j, int a, int valor) {
    M[i][j] = 1;
    if (con >= n * m - 1) {
        return;
    }
    if (i >= 0 && i < n && j >= 0 && j < m) {
        V[i][j] = min(V[i][j], valor);
        con++;
    }
    if(a==0){
        if(M[i][j-1]==0){
            espiral2(i,j-1,1,valor+1);
            return;
        }else{
            espiral2(i-1,j,0,valor+1);
            return;
        }
    }else if(a==1){
        if(M[i+1][j]==0){
            espiral2(i+1,j,2,valor+1);
            return;
        }else{
            espiral2(i,j-1,1,valor+1);
        }
    }else if(a==2){
        if(M[i][j+1]==0){
            espiral2(i,j+1,3,valor+1);
        }else{
            espiral2(i+1,j,2,valor+1);
        }
    }else{
        if(M[i-1][j]==0){
            espiral2(i-1,j,0,valor+1);
        }else{
            espiral2(i,j+1,3,valor+1);
        }
    }
}
int main(){
    cin>>n>>m>>k;
    V.assign(n,vector<int>(m,10000000));
    for(int i=0;i<k;i++){
        int a,b,c;
        cin>>a>>b>>c;
        a--;
        b--;
        M.clear();
        con=0;
        if(c==0){
            M[a][b]=1;
            V[a][b]=1;
            espiral(a-1,b,0,2);
        }else{
            M[a][b]=1;
            V[a][b]=1;
            espiral2(a-1,b,0,2);
        }
    }
    for(auto x:V){
        for(auto y:x){
            cout<<y<<" ";
        }
        cout<<"\n";
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |