778 水位上公升的泳池中游泳

2021-10-18 07:56:14 字數 2721 閱讀 3508

778. 水位上公升的泳池中游泳

在乙個 n x n 的座標方格grid中,每乙個方格的值grid[i][j]表示在位置(i,j)的平台高度。

現在開始下雨了。當時間為t時,此時雨水導致水池中任意位置的水位為t。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩個平台。假定你可以瞬間移動無限距離,也就是預設在方格內部游動是不耗時的。當然,在你游泳的時候你必須待在座標方格裡面。

你從座標方格的左上平台 (0,0) 出發。最少耗時多久你才能到達座標方格的右下平台(n-1, n-1)

示例 1:

輸入:[[0,2],[1,3]]輸出:3解釋:時間為0時,你位於座標方格的位置為(0, 0)。此時你不能遊向任意方向,因為四個相鄰方向平台的高度都大於當前時間為 0 時的水位。

等時間到達 3 時,你才可以遊向平台 (1, 1). 因為此時的水位是 3,座標方格中的平台沒有比水位 3 更高的,所以你可以遊向座標方格中的任意位置

示例2:

輸入:[[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]]輸出:16解釋:0  1  2  3  424 23 22 21512 13 14 15 161117 18 19 2010  9  8  7  6最終的路線用加粗進行了標記。

我們必須等到時間為 16,此時才能保證平台 (0, 0) 和 (4, 4) 是連通的

2 <= n <= 50.

grid[i][j][0, ..., n*n - 1]的排列。

思路:分析一下,當時刻為t的時候,所有格仔中的水位是一樣高的,所以最低的水位就是路徑上的最大值,我們要讓這個最大值最小,和昨天那道1631. 最小體力消耗路徑一樣的思路啊喂:

a. 二分答案 + 連通性判定(bfs or dfs)

class solution ;

bool bfs(int n, int m, vector>& grid, int limit));

visited[0][0] = true;

node node;

while(!que.empty())

if(x > 0 && !visited[x - 1][y] && grid[x - 1][y] <= limit));

}if(x + 1 < n && !visited[x + 1][y] && grid[x + 1][y] <= limit));

}if(y > 0 && !visited[x][y - 1] && grid[x][y - 1] <= limit));

}if(y + 1 < m && !visited[x][y + 1] && grid[x][y + 1] <= limit));}}

return false;

}int swiminwater(vector>& grid) else

}return ans;

}};

b. 並查集+貪心

class solution 

void union(int a, int b)

}int inset[55][55];

struct point

};point points[2510];

int swiminwater(vector>& grid) ;}}

sort(points, points + cnt);

for(i = 0; i < cnt; ++ i)

if(x + 1 < n && inset[x + 1][y])

if(y > 0 && inset[x][y - 1])

if(y + 1 < n && inset[x][y + 1])

}return 0; //出發點就是目標點

}};

c. djkstra求最短路

class solution 

};int swiminwater(vector>& grid) );

point point;

while(!pri_que.empty())

//沒到終點 更新dist

if(x > 0 && !visited[x - 1][y]));

}if(x + 1 < n && !visited[x + 1][y]));

}if(y > 0 && !visited[x][y - 1]));

}if(y + 1 < n && !visited[x][y + 1]));}}

return 0; //出發點就是目標點

}};

力扣778水位上公升的泳池中游泳 python

res 0 n len grid heap grid 0 0 0,0 初始化第乙個點 visited set 0,0 我們建立個集合儲存我們走過的點,不需要再走一遍了 while heap res max res,height 我們選取最高水位作為返回值 if x n 1and y n 1 retu...

778 水位上公升的泳池中游泳 並查集

778.水位上公升的泳池中游泳 難度困難159 在乙個 n x n 的座標方格grid中,每乙個方格的值grid i j 表示在位置 i,j 的平台高度。現在開始下雨了。當時間為t時,此時雨水導致水池中任意位置的水位為t。你可以從乙個平台遊向四周相鄰的任意乙個平台,但是前提是此時水位必須同時淹沒這兩...

每日一題 778 水位上公升的泳池中游泳

778.水位上公升的泳池中游泳 分類 並查集 二分答案 最短路 並查集思路挺簡單的。由小到大挨個加,檢查下連上了沒就行。class unionfind introot int i bool connect int i,int j if sz ri sz rj u rj ri sz ri sz rj ...