1. 程式人生 > 實用技巧 >leetcode_990等式方程的課滿足性(並查集)

leetcode_990等式方程的課滿足性(並查集)

作者: Turbo時間限制: 1S章節: 其它

晚於: 2020-09-09 12:00:00後提交分數乘係數50%

問題描述 :

在由 1 x 1 方格組成的 N x N 網格 grid 中,每個 1 x 1 方塊由 /、\ 或空格構成。這些字元會將方塊劃分為一些共邊的區域。

(請注意,反斜槓字元是轉義的,因此輸入的字串中是 \,在程式碼中函式呼叫時傳遞的實參用 "\\" 表示一個"\"。)。

返回區域的數目。

示例 1:

輸入:

[

" /",

"/ "

]

輸出:2

解釋:2x2 網格如下:

示例 2:

輸入:

[

" /",

" "

]

輸出:1

解釋:2x2 網格如下:

示例 3:

輸入:

[

"\/",

"/\"

]

輸出:4

解釋:(回想一下,因為 \ 字元是轉義的,所以 "\\/" 表示 \/,而 "/\\" 表示 /\。)

2x2 網格如下:

示例 4:

輸入:

[

"/\",

"\/"

]

輸出:5

解釋:(回想一下,因為 \ 字元是轉義的,所以 "/\\" 表示 /\,而 "\\/" 表示 \/。)

2x2 網格如下:

示例 5:

輸入:

[

"//",

"/ "

]

輸出:3

解釋:2x2 網格如下:

可使用如下main函式:

int main()

{

int n;

vector<string> grid;

string line;

cin>>n;

cin.get();

for(int i=0; i<n; i++)

{

getline(cin,line);

grid.push_back(line);

}

int res=Solution().regionsBySlashes(grid) ;

cout<<res;

}

輸入說明 :

首先輸入網格的大小N,1 <=N<= 30

然後輸入N行,每行N個字元,每個字元是'/'、'\'、或 ' '。

輸出說明 :

輸出結果

輸入範例 :

輸出範例 :

#include <iostream>
#include 
<string> #include <vector> #include <map> #include <algorithm> using namespace std; class Solution { public: vector<int> f; int find(int x) { return x==f[x] ? x : f[x]=find(f[x]); } int merge(int u, int v) { int fu = find(u), fv = find(v); if (fu == fv) return 0; f[fv] = fu; return 1; } int regionsBySlashes(vector<string>& grid) { int n = grid.size(); f = vector<int>((n+1)*(n+1), 0); for (int i = 0; i < (n+1)*(n+1); ++i) { f[i] = i; } for (int i = 0; i < n; ++i) { merge(i, i+1); merge(n*(n+1)+i, n*(n+1)+i+1); merge(i*(n+1), (i+1)*(n+1)); merge(i*(n+1)+n, (i+1)*(n+1)+n); } int cnt = 1; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (grid[i][j] == ' ') continue; int u, v; if (grid[i][j] == '/') { u = i*(n+1)+j+1; v = (i+1)*(n+1)+j; } else { u = i*(n+1)+j; v = (i+1)*(n+1)+j+1; } if (!merge(u, v)) cnt++; } } return cnt; } }; int main() { int n; vector<string> grid; string line; cin>>n; cin.get(); for(int i=0; i<n; i++) { getline(cin,line); grid.push_back(line); } int res=Solution().regionsBySlashes(grid) ; cout<<res; } //https://leetcode-cn.com/problems/regions-cut-by-slashes/solution/c-cha-bing-ji-by-ekulelu-3/ //https://leetcode-cn.com/problems/regions-cut-by-slashes/solution/c-bing-cha-ji-tong-guo-xie-gang-liang-ding-dian-sh/