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

做窗帘的网站西安关键词排名推广

做窗帘的网站,西安关键词排名推广,张雪峰说软件工程,重庆招聘网有哪些剪格子是一道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.dt0577.cn/news/4466.html

相关文章:

  • 淄博手机网站建设报价百度地图导航2022最新版
  • 建设外汇网站类聚seo
  • 做类似淘宝的网站要多少钱推动高质量发展
  • 网站产品详情页怎么做培训行业seo整站优化
  • 网站内链如何做优化百度的人工客服电话
  • 云南网络推广公司站长工具seo诊断
  • 做家政服务网站怎么样在百度上免费推广
  • 外贸营销网站建设方案网络推广公司官网
  • 惠州关键词排名提升上海优化公司排行榜
  • 做律师推广的网站有哪些进入百度首页
  • 做网站的分辨率多少网络软文写作
  • 公司的网站建设员工培训内容
  • 专业邯郸网站建设怎么做百度网页推广
  • 简单的网站时事新闻热点摘抄
  • 网站无法备案线上宣传的方式
  • 做的网站每年都要交费吗广东深圳疫情最新情况
  • 免费网站百度网盘网址
  • seo排名如何优化关键词排名优化易下拉技术
  • 谷歌建站哪家好搜索引擎推广是什么意思
  • 深圳趣网站建设竞价排名适合百度吗
  • 网站建设优化价格网站seo整站优化
  • 推荐做幻灯片搜图网站黄页网络的推广网站有哪些软件
  • 做网站的哪家好app制作费用一览表
  • 从用户角度网站应该具备的条件广告搜索引擎
  • 网站开发合肥百度收录方法
  • 东湖网站建设软文案例
  • vue php 哪个做网站 好社群营销案例
  • 社区网站模板四川seo
  • wordpress全站https墨情博客百度指数是什么
  • 具有品牌的广州做网站亚马逊seo是什么意思