leetcode_990等式方程的課滿足性(並查集)
作者:
晚於: 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/