快来注册~
您需要 登录 才可以下载或查看,没有账号?注册账号
x
for (size_t i = _height - 1; i >= 0; i--)这段代码看起来没有什么问题,其实有一个大坑,是因为size_t是一种非负类型,它永远都不可能会小于0,所以循环停不下来。把size_t改成int就没问题了。
- #include"utils.h"
- #include<iostream>
- using namespace std;
- void calMinDis()
- {
- bool **_map = NULL;
- int **_min_dis;
- int _height = 100;
- int _width = 200;
- _map = new bool*[_height];
- for (size_t i = 0; i < _height; i++)
- {
- _map[i] = new bool[_width];
- }
- printf("cal min dis.\n");
- if (_map == NULL)
- {
- printf("map haven't init.\n");
- return;
- }
- _min_dis = new int *[_height];
- for (size_t i = 0; i < _height; i++)
- {
- _min_dis[i] = new int[_width];
- }
- int MAX_INT = 0xffffffff >> 1;
- for (size_t i = 0; i < _height; i++)
- {
- for (size_t j = 0; j < _width; j++)
- {
- if (_map[i][j])
- {
- _min_dis[i][j] = MAX_INT;
- }
- else
- {
- _min_dis[i][j] = 0;
- }
- }
- }
- for (size_t i = 0; i < _height; i++)
- {
- for (size_t j = 0; j < _width; j++)
- {
- if (!_map[i][j])
- {
- continue;
- }
- if (i > 0 && _min_dis[i - 1][j] < _min_dis[i][j])
- {
- _min_dis[i][j] = _min_dis[i - 1][j] + 1;
- }
- if (j > 0 && _min_dis[i][j - 1] < _min_dis[i][j])
- {
- _min_dis[i][j] = _min_dis[i][j - 1] + 1;
- }
- }
- }
- printf("1\n");
- for (size_t i = _height - 1; i >= 0; i--)
- {
- for (size_t j = _width - 1; j >= 0; j--)
- {
- printf("(%d,%d)\n",i,j);
- if (!_map[i][j])
- {
- continue;
- }
- if (i + 1 < _height && _min_dis[i + 1][j] < _min_dis[i][j])
- {
- _min_dis[i][j] = _min_dis[i + 1][j] + 1;
- }
- if (j + 1 < _width && _min_dis[i][j + 1] < _min_dis[i][j])
- {
- _min_dis[i][j] = _min_dis[i][j + 1] + 1;
- }
- }
- }
- printf("finished cal min dis.\n");
- }
- int main(int argc, char const *argv[])
- {
- calMinDis();
- return 0;
- }
复制代码
|
免责声明:
资源盒论坛发布的一切资源、模型和注册信息及软件的源码教程仅限用于学习和研究目的;
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站资源来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
如果您喜欢该程序/源文件,请支持正版软件,购买/注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
若本站侵犯了您的权益请联系站长进行删除处理E-mail:190183740@qq.com;
|