年前最后一次2022.1.28_RP++
T1同昨(我看到题目就粘上昨天的代码,结果题还没发我就A了hhhhhh)
T2一开始想用深搜,结果T掉了。。。只好改广搜,就挺令人头大
点击查看宽广对比
#include<bits/stdc++.h>
using namespace std;
int sum,n;
int a[50][50];
bool vis[50][50];
void dfs(int x,int y) {
if(x>n+1||y>n+1||x<0||y<0)return;
if(a[x][y])return;
a[x][y]=2;
vis[x][y]=1;
dfs(x+1,y);
dfs(x,y+1);
dfs(x-1,y);
dfs(x,y-1);
return;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
scanf("%d",&a[i][j]);
if(a[i][j]==1)sum++;
}
}
dfs(0,0);//横纵坐标
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(a[i][j]==1) printf("1 ");
if(a[i][j]==2) printf("0 ");
if(a[i][j]==0) printf("2 ");
}
printf("\n");
}
return 0;
}
点击查看宽广对比
#include<bits/stdc++.h>
using namespace std;
char a[1010][1010];
int sum,mi;
int gox[4]= {1,-1,0,0},goy[4]= {0,0,1,-1},h[1000001][4];
int n,qx,qy,zx,zy;
int bfs(int x,int y) {
int tail=1,head=0,xx,yy;
h[1][1]=x;
h[1][2]=y;
h[1][3]=0;
while(tail>head) {
head++;
for(int i=0; i<4; i++) {
xx=h[head][1]+gox[i];
yy=h[head][2]+goy[i];
if(xx==zx&&yy==zy) {
return h[head][3]+1;
}
if(xx>=1&&yy>=1&&xx<=n&&yy<=n&&a[xx][yy]=='0') {
tail++;
a[xx][yy]='1';
h[tail][1]=xx;
h[tail][2]=yy;
h[tail][3]=h[head][3]+1;
}
}
}
}
int main() {
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>a[i][j];
cin>>qx>>qy>>zx>>zy;
printf("%d",bfs(qx,qy));
return 0;
}
广搜流读入都比深搜跑得快无数倍,他优秀就优秀在找到的第一个头就一定是最优路径=_=
主要是我深搜和广搜写的几乎一摸一样,所以经常就忽略了广搜优秀的时间
对于T3到没什么,坑在于我习惯性地在bfs中while+for+if但这里注意即可能是竖直变水平也有可能是水平变竖直
so,这里代码实现的时候最后判是否合法用 while
易错代码
while(tail>=head)
{
head++;
for(int i=0;i<4;i++)
{
x=t[head][1]+gox[i];
y=t[head][2]+goy[i];
while(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]==0)//这里!!!!
{
if(x==ex&&y==ey)
{
printf("%d",t[tail][3]);
return;
}
a[x][y]=1;
tail++;
t[tail][1]=x;
t[tail][2]=y;
t[tail][3]=t[head][3]+1;
x+=gox[i];
y+=goy[i];
}
}
}
对于T4,核心代码与T3同(但要注意n,m的长宽是反的),重点在于复习次数未知的读入
点击查看代码
int main()
{
char x;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
x=getchar();
for(int j=1;j<=n;j++)
{
x=getchar();
if(x==' ')a[i][j]=0;
else a[i][j]=1;
}
}
scanf("%d%d%d%d",&by,&bx,&ey,&ex);
while(bx||by||ex||ey)
{
a[ex][ey]=0;
bfs();
a[ex][ey]=1;
scanf("%d%d%d%d",&by,&bx,&ey,&ex);
}
return 0;
}
年前最后一次2022.1.28_RP++的更多相关文章
- CA周记 2022年的第一课 - Rust
现代编程语言有很多,在我的编程学习里面有小学阶段的 LOGO , 中学阶段的 Pascal ,也有大学阶段的 C/C++.Java..NET,再到工作的 Objective-C .Swift.Go.K ...
- 罗振宇2022"时间的朋友"跨年演讲
罗振宇2022"时间的朋友"跨年演讲 行就行,不行我再想想办法. 原来,还能这么干! 堆资源不是解决问题的唯一道路,还是那句话:"处于困境中的人往往只关注自己的问题.而解 ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- 2022年windows的Visual Studio 安装后初始配置
目录 前言 1.开发环境设置,修改存储空间 打开编译器,选择工具-->导入和导出设置-->重置所有设置-->下一步 修改盘符-->下一步->选择环境->完成 2.主 ...
- SQL Server 2008 R2——当前日期下,一年前数据的统计值
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- 使用C#把发表的时间改为几年前,几个月,几天前,几小时前,几分钟前,或几秒前
我们在评论中往往会看到多少天前,多少小时前. 实现原理:现在时间-过去时间 得到的时间差来做比较 下面我定义了一个Helper类,大家直接引用即可,参数就是时间差,注意时间差类型是TimeSpan类型 ...
- PHP 显示文章发布日期 一小时前 一天前 一月前 一年前
<?PHP /*** 传入日期格式或时间戳格式时间,返回与当前时间的差距,如1分钟前,2小时前,5月前,3年前等* @param string or int $date 分两种日期格式" ...
- 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
第三部分 NN-ANN 70年前的逆向推演 从这部分开始,调整一下视角主要学习神经网络算法,将其与生物神经网络进行横向的比较,以窥探一二. 现在基于NN的AI应用几乎是满地都是,效果也不错,这种貌似神 ...
- 多年前写的文本框扩展控件(有ValueChanging事件等),已放github
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 代码 使用 GitHub ...
随机推荐
- unittest_skip跳过用例执行(3)
在执行测试用例时,有时候有些用例是不需要执行的,比如版本迭代用例弃用,测试周期短只需要执行优先级高的用例,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作 ...
- python的赋值、浅拷贝和深拷贝
""" 一.赋值在python中就是简单的对象引用 """ list_a = ["aaa", "bbb&quo ...
- linux安全篇:禁止频繁访问的ip访问nginx
实验环境 版本:redhat6.5ip:172.16.1.100,172.16.10软件:nginx 172.16.1.10部署nginx [root@localhost tools]# lsngin ...
- 05.python解析式与生成器表达式
解析式和生成器表达式 列表解析式 列表解析式List Comprehension,也叫列表推导式 #生成一个列表,元素0-9,将每个元素加1后的平方值组成新的列表 x = [] for i in ra ...
- HDU 1576 A/B (两种解法)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 分析:等式枚举法,由题意可得:, ,代入 , 得:,把变量 合在一起得: :即满足 为 倍 ...
- python极简教程04:进程和线程
测试奇谭,BUG不见. 大家好,我是谭叔. 这一场,主讲python的进程和线程. 目的:掌握初学必须的进程和线程知识. 进程和线程的区别和联系 终于开始加深难度,来到进程和线程的知识点~ 单就这两个 ...
- Web开发之request
request常用方法 //常用方法 //得到的是:协议+服务器地址+端口号+工程名称+资源地址+参数 String url = request.getRequestURL(); //得到的是:工程名 ...
- day 13 函数指针类型
(1).有以下程序: 则正确的选项是[B] (A).7 4 (B).4 10 (C).8 8 (D)10 10 分析:主要考求字符串的长度,strlen是专门求字符串长度的函数,但不包含'\0'在内. ...
- Teamcenter无法创建多余账号怎么办?
西门子的产品Teamcenter,用户账号的许可是命名的许可类型,数量是限定的:例如,账号许可购买了25个,那么活动账号已经达到25了,再创建第26个账号将无法创建.没办法创建多余的账号,怎么办? 当 ...
- 【记录一个问题】macos下lldb调试opencv的一个程序,出现“failed to load objfile for”错误,并且无法调试进入opencv的函数
opencv编译使用了Debug版本,打开了BUILD_WITH_DEBUG_INFO=ON选项. 发现问题后,我又在CMAKE_CXX_FLAGS_DEBUG中设置为 -g -ggdb3,在CMAK ...