c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

题目描述

学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。

输入

第一行两个整数n, m,为迷宫的长宽。

接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。

输出

第一行一个数为需要的最少步数K。

第二行K个字符,每个字符∈{U,D,L,R},分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。

样例输入

3 3

001

100

110

样例输出

4

RDRD

和一般的算出最短路径不同的是,还要记录方向,之前省赛的时候没有做出来,现在按照大佬的思路做了下(用一个字符串存方向,每次放一个字母),但是只过了83%的样例,歇会儿再改改(第一个是错误版本,第二个是正确版本)

#include

#include

#include

#include

#include

#include

using namespace std;

const int INF=0x3f3f3f3f;

typedef pair P;

int N,M;

int d[][];

char a[][];

int dx[]={,,,-};

int dy[]={,-,,};

char pos[]={'D','L','R','U'};

int sx,sy,gx,gy;

int x,y,nx,ny;

void bfs()

{

memset(d,INF,sizeof(d));

sx=,sy=,gx=N-,gy=M-;

string s="";

queue

que;

que.push(P(sx,sy));

d[sx][sy]=;

while(!que.empty()){

P p=que.front();

que.pop();

x=p.first,y=p.second;

if(x==gx&&y==gy) break;

for(int i=;i

nx=x+dx[i],ny=y+dy[i];

if(nx>=&&nx=&&ny

s+=pos[i];

que.push(P(nx,ny));

d[nx][ny]=d[x][y]+;

}

}

}

cout<

cout<

}

int main()

{

while(cin>>N>>M){

for(int i=;i

for(int j=;j

cin>>a[i][j];

}

}

bfs();

}

return ;

}

对比了下过了的大佬的代码,自己又改了改,过了。。。区别在于需要给每个结点一个字符串记录路径方向,而不是只用一个字符串记录。。。

#include

#include

#include

#include

#include

#include

using namespace std;

const int INF=0x3f3f3f3f;

struct node

{

int first,second;

string s;

};

int N,M;

int d[][];

char a[][];

int dx[]={,,,-};

int dy[]={,-,,};

char pos[]={'D','L','R','U'};

int sx,sy,gx,gy;

int x,y,nx,ny;

void bfs()

{

memset(d,INF,sizeof(d));

sx=,sy=,gx=N-,gy=M-;

queue que;

node p;

p.first=sx,p.second=sy,p.s="";

que.push(p);

d[p.first][p.second]=;

node k,l;

while(!que.empty()){

k=que.front();

que.pop();

x=k.first,y=k.second;

if(x==gx&&y==gy) break;

for(int i=;i

nx=x+dx[i],ny=y+dy[i];

if(nx>=&&nx=&&ny

l.first=nx,l.second=ny,l.s=k.s+pos[i];

que.push(l);

d[nx][ny]=d[x][y]+;

}

}

}

cout<

cout<

}

int main()

{

while(cin>>N>>M){

for(int i=;i

for(int j=;j

cin>>a[i][j];

}

}

bfs();

}

return ;

}

问题 1936&colon; &lbrack;蓝桥杯&rsqb;&lbrack;算法提高VIP&rsqb;最大乘积

问题 1936: [蓝桥杯][算法提高VIP]最大乘积 时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16 题目描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? ...

Java实现 蓝桥杯 算法提高VIP Substrings(暴力)

试题 算法提高 Substrings 问题描述 You are given a number of case-sensitive strings of alphabetic characters, f ...

Java实现 蓝桥杯 算法提高VIP 摆花 dp 记忆搜索 2种做法 多重背包

题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)

蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法) 首先这不是一个多难的题,但是网上的我没怎么找到有Java的代码,基本全都是c语言的,小编是个小白,如果有不对的地方请联系小编 问题描述 ...

蓝桥杯 算法提高 学霸的迷宫 经典BFS问题

算法提高 学霸的迷宫   时间限制:1.0s   内存限制:256.0MB      问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城 ...

Java实现 蓝桥杯 算法提高 学霸的迷宫

算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...

Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

Java实现 蓝桥杯 算法提高 小X的购物计划

试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...

蓝桥杯算法提高 P1001(大数乘法)

算法提高 P1001   时间限制:1.0s   内存限制:256.0MB   当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体 ...

随机推荐

JavaScript基础知识总结(二)

JavaScript语法 二.数据类型 程序把这些量.值分为几大类,每一类分别叫什么名称,有什么特点,就叫数据类型. 1.字符串(string) 字符串由零个或多个字符构成,字符包括字母,数字,标点符 ...

Win10&plus;VS2015&plus;EF6&period;0&plus;MySQL5&period;6&plus;MVC环境部署和排错

本来已经好几个月不弄专业了,今天一哥们问我问题的时候重新捣鼓了一下,就做个文档供后来人参考吧~ 1.首先安装MySQL 5.6 安装很简单我就不说了,你参考下:http://jingyan.baidu ...

工具&colon;使用jekyll生成静态网站

在使用前端框架构建网页而不使用后端平台与数据库,即没有服务器的条件下读取文件夹其他文件,浏览器可能会阻止访问.对于这种静态构建可以使用简单的生成工具jekyll.它主要适用于将静态文件生成静态网站,在 ...

Java for LeetCode 199 Binary Tree Right Side View

Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...

Hibernate使用MyExclipse10自动生成配置文件报错

使用MyExclipse10自动生成hibernate映射文件如下: 结果发现启动服务时报以下错误: 原因:因为hibernate换过项目地址,所以dtd文件的地址也换掉了.在hbm.xml文件里面把 ...

X5学习笔记—给单元格添加颜色

设置grid某一个单元格的颜色 可以用dhtmlxgrid的原生态方法 setCellTextStyle (row_id, ind, styleString) 参数: rowid:行id cellin ...

加快SQL连接速度

[mysqld] skip-name-resolve       http://www.jb51.net/article/27616.htm

wamp环境搭建

php 进入php安装目录. 修改php.ini-developement为php.ini 配置扩展目录为你的PHP安装目录下的ext目录,在我这里是 extension_dir = "C: ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值