fork download
  1. /*Made by Shivam Solanki*/
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define DEBUG(x) cout << '>' << #x << ':' << x << endl;
  5. #define ll long long int
  6. typedef vector<int> vi;
  7. typedef vector<ll> vll;
  8. typedef vector<vll> vvl;
  9. typedef pair<int,int> pii;
  10. typedef pair<ll,ll> pll;
  11. typedef vector<vi> vvi;
  12. typedef vector<bool> vb;
  13. typedef vector<vb> vvb;
  14. typedef vector<pii> vp;
  15. typedef vector<pll> vpll;
  16. typedef map<int,int> mii;
  17. typedef map<ll,ll> mll;
  18. typedef set<int> sii;
  19. typedef set<ll> sll;
  20. typedef priority_queue<int> pq;
  21. typedef unordered_map<int,int> umii;
  22. typedef unordered_map<ll,ll> umll;
  23. typedef queue<int> qii;
  24. #define rep(i,k,n) for (int i = k; i < n; ++i)
  25. #define repr(i,k,n) for (int i = n; i>=k; --i)
  26. #define repll(i,k,n) for (ll i = k; i < n; ++i)
  27. #define repllr(i,k,n) for (ll i = n; i >= k; --i)
  28. #define pb push_back
  29. #define mp make_pair
  30. // #define gcd __gcd
  31. #define F first
  32. #define S second
  33. #define all(x) x.begin(),x.end()
  34. #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  35. const int INF = 1e9+5;
  36. const int MOD = 1e9+7;
  37.  
  38. int dx[]={1,0,-1,0};
  39. int dy[]={0,1,0,-1};
  40.  
  41. void solve(){
  42. int n,m;
  43. cin>>n>>m;
  44. int ans[n][m];
  45. rep(i,0,n){
  46. rep(j,0,m){
  47. ans[i][j]=-1;
  48. }
  49. }
  50. int c1;
  51. cin>>c1;
  52. set<pii> s1;
  53. // vvi v1;
  54. queue<pii>q;
  55. rep(i,0,c1){
  56. int x,y;
  57. cin>>x>>y;
  58. --x,--y;
  59. s1.insert({x,y});
  60. // v1.pb({x,y});
  61. ans[x][y]=0;
  62. q.push({x,y});
  63. }
  64. cin>>c1;
  65. set<pii>s2;
  66. rep(i,0,c1){
  67. int x,y;
  68. cin>>x>>y;
  69. --x,--y;
  70. s2.insert({x,y});
  71. }
  72. auto isvalid=[&](int i,int j){
  73. if(s2.count({i,j}) or s1.count({i,j})){
  74. return false;
  75. }
  76. if(i>-1 and j>-1 and i<n and j<m){
  77. return true;
  78. }
  79. return false;
  80. };
  81. // for(vi &s:v1){
  82. // cout<<s.F<<' '<<s.S<<'\n';
  83. while(!q.empty()){
  84. pii v=q.front();
  85. q.pop();
  86. rep(i,0,4){
  87. // cout<<dx[i]+v.F<<' '<<dy[i]+v.S<<' '<<isvalid(dx[i]+v.F,dy[i]+v.S)<<'\n';
  88. if(isvalid(dx[i]+v.F,dy[i]+v.S) and (ans[dx[i]+v.F][dy[i]+v.S]==-1)){
  89. // cout<<"HI\n";
  90. ans[dx[i]+v.F][dy[i]+v.S]=ans[v.F][v.S]+1;
  91. q.push({dx[i]+v.F,dy[i]+v.S});
  92. }
  93. }
  94. }
  95. // }
  96. rep(i,0,n){
  97. rep(j,0,m){
  98. if(s2.count({i,j})) cout<<'X'<<' ';
  99. else cout<<ans[i][j]<<' ';
  100. }
  101. cout<<'\n';
  102. }
  103. }
  104.  
  105.  
  106. int main(){
  107. // #ifndef ONLINE_JUDGE
  108. // freopen("input.txt", "r", stdin);
  109. // freopen("output.txt", "w", stdout);
  110. // #endif
  111. fastio;
  112. int t=1;
  113. cin>>t;
  114. while(t--)
  115. solve();
  116. return 0;
  117. }
Success #stdin #stdout 0s 4396KB
stdin
1
3 3
2
1 1
1 3
2
2 1
2 2
stdout
0 1 0 
X X 1 
4 3 2