中级农民
- 积分
- 106
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-5-14
- 最后登录
- 1970-1-1
|
用DFS不行么?感觉代码稍微简单点啊。。。
- void dfs(vector<vector<int>> &matrix, int pos, vector<bool> &visit,unordered_map<int, int> &map) {
- int i = pos/matrix[0].size();
- int j = pos%matrix[0].size();
- if(visit[pos] == true)
- return;
- visit[pos] = true;
- map[pos]++;
- int val = matrix[i][j];
- if(i && matrix[i-1][j] > val){
- int tmp = (i-1)*matrix[0].size() + j;
- dfs(matrix, tmp, visit,map);
- }
- if(j && matrix[i][j-1] > val){
- int tmp = i*matrix[0].size() + j - 1;
- dfs(matrix, tmp, visit,map);
- }
- if(i < matrix.size()-1 && matrix[i+1][j] > val){
- int tmp = (i+1)*matrix[0].size() + j;
- dfs(matrix, tmp, visit,map);
- }
- if(j < matrix[0].size()-1 && matrix[i][j+1] > val){
- int tmp = (i)*matrix[0].size() + j + 1;
- dfs(matrix, tmp, visit,map);
- }
- return;
- }
- int findhighest(vector<vector<int>> &matrix, vector<int> pts){
- unordered_map<int,int> map;
- int m = matrix.size();
- int n = matrix[0].size();
-
- for(int k = 0; k < pts.size(); k++) {
- vector<bool> visit(m*n, false);
- dfs(matrix, pts[k],visit,map);
- }
- int num = 0;
- int pos = 0;
- for(auto it:map){
- if(it.second == pts.size())
- if(matrix[it.first/n][it.first%n] > num){
- num = matrix[it.first/n][it.first%n];
- pos = it.first;
- }
-
- }
- return pos;
- }
- int main(int argc, const char * argv[]) {
- vector<vector<int>> num{{1, 5, 3, 2}, {9, 3, 8, 2}, {9, 4, 8, 9}, {0, 3, 2, 3}};
- vector<int> pts{5,7, 14};
- cout << findhighest(num, pts);
- }
复制代码 |
|