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

做窗帘的网站长春网络营销公司

做窗帘的网站,长春网络营销公司,做网站项目的意义ppt介绍,平台类网站建设公司剪格子是一道dfs入门题。 我先写了个dfs寻找路径的模板,没有按题上要求输出。当我确定我的思路没错时,一直运行不出正确结果。然后我挨个和以前写的代码对比,查了两个小时才发现,是命名风格的问题。 我今天写的代码如下&#xff…

剪格子是一道dfs入门题。
在这里插入图片描述
我先写了个dfs寻找路径的模板,没有按题上要求输出。当我确定我的思路没错时,一直运行不出正确结果。然后我挨个和以前写的代码对比,查了两个小时才发现,是命名风格的问题。
我今天写的代码如下:

#include<iostream>
#include<vector>
#include<string>
using namespace std;// 必须从11开始
// 出口bool vis[4][4];
int g[4][4];
int res = 0;
int sum = 0;
int n, m;
int dirs[4][2] = { {1, 0}, {-1, 0},{0, 1},{0, -1}};
// 如何去重
void dfs(int i, int j, int cnt)
{// 出口 等于一半 必然没加全if (cnt * 2 == sum){res++;return;}if (cnt * 2 > sum)return;vis[i][j] = true;// 两个方向:限制好dfs别出界for (int i = 0; i < 4; i++){int nx = i + dirs[i][0];int ny = j + dirs[i][1];if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny]){dfs(nx, ny, cnt + g[nx][ny]);}}vis[i][j] = false;
}int main()
{cin >> m>>n;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){cin >> g[i][j];sum += g[i][j];}dfs(1, 1,  g[1][1]);cout << sum<<endl;cout << res;return 0;
}----

挨个注释查了半天发现是4个方向取值不一致,但是我看了半个小时方向变量dirs的赋值没有错,后来通过出输出发现这个代码的遍历路径和下面不一样,最后终于发现原来是命名问题,参数使用了i,j,dirs的取值也用了i,变量命名冲突了。for内的i本该是外圈的i+for内i指向的德尔塔方向,但是这里的i由于较近取值原则,都使用了for的i,所以最后输出错了。所以我将函数参数改为x和y。用x、y也更符合坐标命名的风格。我开始编写代码没有注意,随手用了i、j。所以函数参数千万别用i、j函数参数千万别用i、j函数参数千万别用i、j。因为但凡有for循环,就会冲突
同时我也知道了我今天做的另外一道路径dfs题为什么一直出错了,因为函数传参也用了i、j。
下篇博客我会写那道题

#include<iostream>
#include<vector>
#include<string>
using namespace std;// 必须从11开始
// 出口bool vis[4][4];
int g[4][4];
int res = 0;
int sum = 0;
int n, m;
int dirs[4][2] = { {1, 0}, {-1, 0},{0, 1},{0, -1}};
// 如何去重
void dfs(int x, int y, int cnt)
{// 出口 等于一半 必然没加全if (cnt * 2 == sum){res++;return;}if (cnt * 2 > sum)return;vis[x][y] = true;// 两个方向:限制好dfs别出界for (int i = 0; i < 4; i++){int nx = x + dirs[i][0];int ny = y + dirs[i][1];if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny]){dfs(nx, ny, cnt + g[nx][ny]);}}vis[x][y] = false;
}int main()
{cin >> m>>n;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){cin >> g[i][j];sum += g[i][j];}dfs(1, 1,  g[1][1]);cout << sum<<endl;cout << res;return 0;
}

(其它做题习惯:dfs路径遍历方向用一个二维dirs[4][2]存储即可)
最后,再按题目要求改为题目要求的内容。
(该题不考虑去重:因为固定从顶部剪,且有回溯做标记,且回溯只标记当前dfs来的位置)
这里又他码的不小心错了,dfs参数中count、cnt差点用混了,编程处处要小心啊。

#include<iostream>
#include<vector>
#include<string>
using namespace std;// 必须从11开始
// 出口bool vis[11][11];
int g[11][11];
int res = 0;
int sum = 0;
int n, m;
int dirs[4][2] = { {1, 0}, {-1, 0},{0, 1},{0, -1}};
int ans = INT32_MAX;
// 不去重:因为固定从顶部剪,且有回溯做标记,且回溯只标记当前dfs来的位置
// cnt:目前累加和、count:选了几个格
void dfs(int x, int y, int cnt, int count)
{// 出口 等于一半 必然没加全if (cnt * 2 == sum){//if(ans > count)ans = min(ans, count);return;}if (cnt * 2 > sum)return;vis[x][y] = true;// 两个方向:限制好dfs别出界for (int i = 0; i < 4; i++){int nx = x + dirs[i][0];int ny = y + dirs[i][1];if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny]){dfs(nx, ny, cnt + g[nx][ny], count+1);}}vis[x][y] = false;
}int main()
{cin >> m>>n;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){cin >> g[i][j];sum += g[i][j];}// dfs(1, 1,  g[1][1], 1);cout << ans;return 0;
}

最后是成果通过:
在这里插入图片描述

http://www.zhongyajixie.com/news/22088.html

相关文章:

  • 不良网站代码怎么查项目推广平台排行榜
  • 淄博政府网站建设公司哪家专业pc优化工具
  • win2003怎么做网站营销方式有哪几种
  • 网站后台是怎么操作的长春视频剪辑培训机构
  • 太原做彩票网站公司最新疫情最新数据
  • 济铁工程建设集团公司官方网站百度网站搜索排名
  • 做跨境的网站有哪些个人博客网站
  • 肇庆企业自助建站系统企业管理培训班
  • 可以做盗版漫画网站吗seo网站排名后退
  • 广州网站建设中心广告图片
  • 桥梁建设网站在哪里可以投稿产品软文代写
  • 企业网站黄页怎么做龙网网络推广软件
  • wordpress 获取当前文章的分类吉林网络seo
  • 国外免费网站贺贵江seo教程
  • 新城免费做网站惠州seo外包费用
  • ppt软件seo怎么做关键词排名
  • wordpress调用网站标题最好的网络营销软件
  • 邗江建设局网站资料下载点金推广优化公司
  • 呼市网站建设网络销售是做什么的
  • 青蛙网站建设友缘在线官网
  • 怎么做最火的视频网站网络营销的原理
  • 如何做微信小程序网站小红书推广怎么做
  • 公司建设网站申请报告范文如何进行搜索引擎优化 简答案
  • wordpress几个网站共用用户培训总结怎么写
  • 婚庆大气网站源码恩城seo的网站
  • 自适应网站制作方案搜狐财经峰会直播
  • 音乐网站制作课程报告自媒体怎么做
  • 建设个b2c网站百度提交网站收录查询
  • 网站开发绩效考核与薪酬微信营销平台系统
  • 网站做淘宝客有什么要求网站查询地址