Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int FindSet (int x, int *par){
- if(par[x] == x) return x;
- par[x] = FindSet(par[x], par);
- return par[x];
- }
- void Union (int x, int y, int *par, int *rank){
- x = FindSet(x, par);
- y = FindSet(y, par);
- if (x == y) return;
- if (rank[x] > rank[y]) par[y] = x;
- else{
- par[x] = y;
- if (rank[x] == rank[y]) rank[y]++;
- }
- }
- bool CanDock (int **A, int n, int m, int T){
- cout<<"aa"<<endl;
- int *par = new int [n*m];
- int *rank = new int [n*m];
- for (int i = 0; i < n*m; i++){
- par[i] = i;
- rank[i] = 1;
- }
- for (int i = 0; i < n; i++){
- for (int j = 0; i < m; j++){
- if(A[i][j] > T) {
- if ((i + 1 < n) && A[i + 1][j] > T)
- Union(((i * m) + j), ((i + 1) * m + j), par, rank);
- if ((j + 1 < m) && A[i][j + 1] > T)
- Union(((i * m) + j), ((i * m) + (j + 1)), par, rank);
- }
- }
- }
- bool res;
- if( FindSet(0,par) == FindSet(n*m-1,par)) res = true;
- else res = false;
- delete[] par;
- delete[] rank;
- return res;
- }
- int main() {
- int n, m, T;
- cin>>n>>m>>T;
- int **A = new int* [n];
- cout<<"1"<<endl;
- for (int i = 0; i < n; i++) {
- A[i] = new int[m];
- }
- cout<<"2"<<endl;
- for (int i = 0; i < n; i++ ) {
- for (int j = 0; j < m; j++) {
- cin >> A[i][j];
- }
- }
- cout<<"3"<<endl;
- if (CanDock(A, n, m , T)) cout<<"Can dock";
- else cout<<"Can not dock";
- for (int i=0;i<n;i++){
- delete[] A[i];
- }
- delete[] A;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement