Advertisement
Guest User

Untitled

a guest
May 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int FindSet (int x, int *par){
  6. if(par[x] == x) return x;
  7. par[x] = FindSet(par[x], par);
  8. return par[x];
  9. }
  10.  
  11. void Union (int x, int y, int *par, int *rank){
  12. x = FindSet(x, par);
  13. y = FindSet(y, par);
  14.  
  15. if (x == y) return;
  16. if (rank[x] > rank[y]) par[y] = x;
  17. else{
  18. par[x] = y;
  19. if (rank[x] == rank[y]) rank[y]++;
  20. }
  21. }
  22.  
  23. bool CanDock (int **A, int n, int m, int T){
  24. cout<<"aa"<<endl;
  25. int *par = new int [n*m];
  26. int *rank = new int [n*m];
  27. for (int i = 0; i < n*m; i++){
  28. par[i] = i;
  29. rank[i] = 1;
  30. }
  31.  
  32. for (int i = 0; i < n; i++){
  33. for (int j = 0; i < m; j++){
  34. if(A[i][j] > T) {
  35. if ((i + 1 < n) && A[i + 1][j] > T)
  36. Union(((i * m) + j), ((i + 1) * m + j), par, rank);
  37. if ((j + 1 < m) && A[i][j + 1] > T)
  38. Union(((i * m) + j), ((i * m) + (j + 1)), par, rank);
  39. }
  40. }
  41. }
  42. bool res;
  43. if( FindSet(0,par) == FindSet(n*m-1,par)) res = true;
  44. else res = false;
  45. delete[] par;
  46. delete[] rank;
  47. return res;
  48.  
  49. }
  50.  
  51.  
  52.  
  53. int main() {
  54. int n, m, T;
  55. cin>>n>>m>>T;
  56. int **A = new int* [n];
  57. cout<<"1"<<endl;
  58. for (int i = 0; i < n; i++) {
  59. A[i] = new int[m];
  60. }
  61. cout<<"2"<<endl;
  62. for (int i = 0; i < n; i++ ) {
  63. for (int j = 0; j < m; j++) {
  64. cin >> A[i][j];
  65. }
  66. }
  67. cout<<"3"<<endl;
  68. if (CanDock(A, n, m , T)) cout<<"Can dock";
  69. else cout<<"Can not dock";
  70.  
  71. for (int i=0;i<n;i++){
  72. delete[] A[i];
  73. }
  74. delete[] A;
  75.  
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement