当前位置: 首页 > news >正文

尉氏网站建设衡阳县住房和城乡建设局网站

尉氏网站建设,衡阳县住房和城乡建设局网站,wordpress重新生成标签,网站权重不稳定dfs 回溯 剪枝 这个题和dfs有关#xff0c;但是我之前没有接触过#xff0c;我看了这一篇很好的文章#xff0c;看完之后写的答案。 我觉得很好的总结#xff1a; dfs模板 int check(参数) {if(满足条件)return 1;return 0; }void dfs(int step) {判断边界{相应操作}尝试…dfs 回溯 剪枝 这个题和dfs有关但是我之前没有接触过我看了这一篇很好的文章看完之后写的答案。 我觉得很好的总结 dfs模板 int check(参数) {if(满足条件)return 1;return 0; }void dfs(int step) {判断边界{相应操作}尝试每一种可能{满足check条件标记继续下一步dfs(step1)恢复初始状态回溯的时候要用到} } 尝试每一种可能一般都是用for循环。 在一些情况下for循环这一步可以写到外面去然后再调用dfs比如这题就可以。  题目 我的思路 其实就是模仿我刚刚提到的文章。 我的dfs是bool dfs(std::vectorstd::vectorchar grid, std::string target, int step, int pre_i, int pre_j) 是拿上一步的pre_i和pre_j作为输入然后我发现这样写没办法启动dfs但是我当时脑子抽了没找到直接输入i和j就能做出来的办法。所以只能第一步遍历所有格子的时候把它写在dfs外面总之有点愚蠢。但是执行时间和内存都比我下一种写法要少很多这是为啥 我自己写的 复杂度 代码 #include vector #include string #include iostream //我写的 dfs 剪枝 回溯 class Solution { public:Solution(){}bool wordPuzzle(std::vectorstd::vectorchar grid, std::string target) {n target.size();if (n 0 || grid.empty() || grid[0].empty())return false;rows grid.size();//行cols grid[0].size();//列int step 1;vis std::vectorint(rows * cols);res std::vectorchar(n);for (int i 0; i rows; i)//因为我写的dfs需要接受前一个dfs的位置i,j为了启动只能把第一轮遍历写在外面了{for (int j 0; j cols; j){if (grid[i][j] target[step - 1]){res[step - 1] grid[i][j];//访问vis[i * cols j] 1;//标记result dfs(grid, target, step 1, i, j);if (result)return result;vis[i * cols j] 0;//回溯res[step - 1] \0;//回溯}}}return result;} private:bool dfs(std::vectorstd::vectorchar grid, std::string target, int step, int pre_i, int pre_j){if (step n 1)return true;//中止条件 判断边界for (int i 0; i rows; i)//尝试每一种可能{for (int j 0; j cols; j){if (vis[i * cols j] 0 //走过的不要grid[i][j] target[step-1]//不相同的直接不要((i * cols j) (pre_i * cols pre_j - cols) ||//上(i * cols j) (pre_i * cols pre_j cols) ||//下(i pre_i j pre_j - 1) ||//左(i pre_i j pre_j 1)))//右{res[step-1] grid[i][j];//访问vis[i * cols j] 1;//标记result dfs(grid, target, step 1, i, j);//下一个if (result)return result;vis[i * cols j] 0;//回溯res[step - 1] \0;//回溯}}}return result;}int n 0;int rows 0;int cols 0;std::vectorint vis;std::vectorchar res;bool result false; };void Test_solution1() {Solution solution;std::vectorstd::vectorchar grid{ { C,A,A} ,{A,A,A},{B,C,D} };std::cout solution.wordPuzzle(grid ,std::string(AAB));} 答案思路 把循环写到dfs外面了。 dfs判断的是当前的点。所以dfs是 dfs(std::vectorstd::vectorchar grid, std::string target, int step, int i, int j) 这里传进来的i和j是需要被判断的点而不是我写的pre_i和pre_j 找方向用的是 result dfs(grid, target, step 1, i - 1, j) ||                 dfs(grid, target, step 1, i 1, j) ||                 dfs(grid, target, step 1, i, j - 1) ||                 dfs(grid, target, step 1, i, j 1); 比我的好多了呵呵。 但是测试的时间和内存异常多。然后我又测试了答案提供的还是很多时间和内存很奇怪啊。 看了答案之后自己根据思路重新写了一遍代码 #include vector #include string #include iostream //看了答案之后模仿写的 dfs 剪枝 回溯 //这个要用很多内存 呃为什么 class Solution { public:Solution() {}bool wordPuzzle(std::vectorstd::vectorchar grid, std::string target) {n target.size();if (n 0 || grid.empty() || grid[0].empty())return false;rows grid.size();//行cols grid[0].size();//列int step 1;vis std::vectorint(rows * cols);//res std::vectorchar(n);for (int i 0; i rows; i)//循环写在外面了{for (int j 0; j cols; j){result dfs(grid, target, step, i, j);if (result)return result;}}return result;} private:bool dfs(std::vectorstd::vectorchar grid, std::string target, int step, int i, int j){if (step n 1)return true;//中止条件if (i 0 i rows j 0 j cols //超过的不要vis[i * cols j] 0 //走过的不要grid[i][j] target[step - 1])//不相同的直接不要{//res[step - 1] grid[i][j];//访问vis[i * cols j] 1;//标记result dfs(grid, target, step 1, i - 1, j) ||dfs(grid, target, step 1, i 1, j) ||dfs(grid, target, step 1, i, j - 1) ||dfs(grid, target, step 1, i, j 1);if (result)return result;vis[i * cols j] 0;//res[step - 1] \0;}return result;}int n 0;int rows 0;int cols 0;std::vectorint vis;//std::vectorchar res;bool result false; };void Test_solution2() {Solution solution;std::vectorstd::vectorchar grid{ { C,A,A} ,{A,A,A},{B,C,D} };std::cout solution.wordPuzzle(grid, std::string(AAB));} 测试结果
http://wiki.neutronadmin.com/news/71250/

相关文章:

  • 关于公司网站开发的事项做哪个网站的人多
  • 二级域名网站建设移动端开发语言
  • 湖南网站建设有限公司简约 网站模板
  • 做伊瑞尔竞技场的网站深圳网站建设最专业的
  • 电商网站建设与运营成本吉林省住房城乡建设厅网站
  • 甘肃省城乡与住房建设厅网站电子商务网站建设与维护考试
  • 商城网站内容模块有哪些推广链接软件
  • 网页网站开发项目设计网站建设基础教程视频
  • 多城市分站网站建设凡科网站登录入口
  • 外贸跟单员的工作内容搜索排名优化策划
  • 如何做网站推广在找产品营销推广吗百度如何发布信息推广
  • 中牟网站推广怎么用手机创造网站
  • 深圳市住房和建设局网站-%3e认租申请ai智能建站
  • 国内大型php网站建设民众镇做网站公司
  • 建设环评备案登记网站crm系统是干什么的
  • 宁波网站推广宣传公司排名网站源码是什么
  • asp网站开发环境cpu餐饮小程序制作
  • 巢湖做网站西宁手机微网站
  • 注册公司需要的网站建设凡客诚品的商业模式
  • 无锡网站制作哪里实惠临沂网站建设企业
  • 做电商网站的流程seo专业培训需要多久
  • 深圳免费网站排名优化wordpress更新php版本号
  • 有哪些企业可以做招聘的网站有哪些内容云南建设银行官方网站
  • 微设计公司网站第一ppt网
  • 藁城区建设局网站做音乐网站要注意什么
  • 许昌建设网站网站建设可行性分析报告范文
  • 微信外部链接网站手机制作网页链接的软件
  • 网站域名备案多长时间做电子章网站
  • 建设广州公司网站天元建设集团有限公司的商业承兑汇票能按时支付吗
  • php做网站常见实例网络营销策略主要包括