博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
542. 01 Matrix
阅读量:7244 次
发布时间:2019-06-29

本文共 2546 字,大约阅读时间需要 8 分钟。

class Solution {public:    vector
> res; int m, n; vector
> updateMatrix(vector
>& matrix) { m = matrix.size(); if (m == 0) return res; n = matrix[0].size(); if (n==0) return res; res = vector
>(m, vector
(n, INT_MAX)); queue
> q; static int dirs[] = { -1, 0, 1, 0, -1 }; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (matrix[i][j] == 0) { res[i][j] = 0; q.push({i,j}); } while (!q.empty()) { auto p = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int x = p.first + dirs[k]; int y = p.second + dirs[k+1]; if (x < 0 || y < 0 || x >= m || y >= n || res[p.first][p.second] + 1 >= res[x][y]) continue; res[x][y] = res[p.first][p.second] + 1; q.push({x, y}); } } return res; }};/* DFS: slowclass Solution {public: vector
> res; int m, n; vector
> updateMatrix(vector
>& matrix) { m = matrix.size(); if (m == 0) return res; n = matrix[0].size(); if (n==0) return res; res = vector
>(m, vector
(n, INT_MAX)); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (matrix[i][j] == 0) { res[i][j] = 0; dfs(matrix, i, j); } return res; } void dfs(vector
>& mx, int i, int j) { static int dirs[] = { -1, 0, 1, 0, -1 }; for (int d = 0; d < 4; d++) { int x = i + dirs[d]; int y = j + dirs[d+1]; if (x < 0 || x >= m || y < 0 || y >= n || res[i][j] + 1 >= res[x][y]) continue; res[x][y] = res[i][j] + 1; dfs(mx, x, y); } }};*//* each point BFS: too slowclass Solution {public: vector
> res; int m, n; vector
> updateMatrix(vector
>& matrix) { m = matrix.size(); if (m == 0) return res; n = matrix[0].size(); if (n==0) return res; res = vector
>(m, vector
(n, INT_MAX)); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) helper(matrix, i, j); return res; } void helper(vector
>& mx, int i, int j) { static int dirs[] = { -1, 0, 1, 0, -1 }; if (mx[i][j] == 0) { res[i][j] = 0; return; } vector
> v(m, vector
(n, false)); queue
> q; q.push({i,j}); v[i][j] = true; int lv = 0; while (!q.empty()) { int qs = q.size(); lv++; while (qs-- > 0) { auto p = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int x = p.first + dirs[k]; int y = p.second + dirs[k+1]; if (x < 0 || y < 0 || x >= m || y >= n || v[x][y]) continue; if (mx[x][y] == 0) { res[i][j] = lv; return; } else { q.push({x, y}); v[x][y] = true; } } } } }};*/

 

转载于:https://www.cnblogs.com/JTechRoad/p/10077224.html

你可能感兴趣的文章
人工智能助力企业客户服务
查看>>
虚拟化技术介绍、Xen的简单实现
查看>>
数据库问题
查看>>
spring mvc文件上传方法
查看>>
RHEL5配置RHCS集群web (无共享存储)
查看>>
Elasticsearch简单使用系列--详细介绍ES的核心概念
查看>>
Django模型查询管理器笔记
查看>>
C# IPC管道通讯模块
查看>>
Java 异常处理的误区和经验总结
查看>>
读书笔记:关于 time_t
查看>>
解决在Android 4.0下无法搜到ubuntu建立的Ad-hoc热点
查看>>
Linux下Mysql数据库备份和恢复全攻略
查看>>
我的友情链接
查看>>
mvc控制器代码
查看>>
FreeSWITCH 与 Asterisk(译)
查看>>
JS判断字符串是否包含某字符串 indexOf()方法使用
查看>>
django 增加south apps
查看>>
nginx配置文件nginx.conf
查看>>
jQuery UI 实例 - 日期选择器(Datepicker)
查看>>
[Unity3d]3D车展之汽车开门关门和旋转缩放的效果的实现
查看>>