#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,100));
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... |