TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 198            测试通过:52

描述

The maze is the same as problem D, and I strongly recommend you solve the previous one first because it.s easier than this.

This time, we want you design the command for our poor robot to move from where it is to its destination. The command sequence.s length should be the shortest. If several solutions exist, find the lexicographically minimum one.

Lexicographical sequence is the order in one dictionary. For example, “cat” is less than “do”, and “do” is less than “dog”.

输入

The first line contains a single integer T, indicating the number of test cases.

Each test case begins with one integer N (1 <= N <= 50), indicating the size of the maze. The followed N lines are N strings whose length is also N, indicating the maze.

输出

For each case, output a command string if there is a solution, otherwise output -1.

样例输入

2
2
S.
#T
4
S#..
.#T.
.##.
....

样例输出

RD
DDDRRRUUL

思路:入门广搜,从S出发到T,如果找得到路径输出字典序最小的那条,找不到则输出-1,可以在结构体内封装一个string属性,在向四个方向搜索的时候,加上对应字的母即可。本题有个小细节是,需要输出的是字典序最小的路径,这点区别于TOJ3128(简单版贪吃蛇),可以在写方向数组的时候,按四个方向的字典序从小到大写,int go[4][2] = {1,0,0,-1,0,1,-1,0}; 这样就可以在找到T的时候直接输出字符串。

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<vector>
#define LL long long
#include<assert.h>
using namespace std;
int go[][] = {,,,-,,,-,};
char ma[][];
int vis[][];
struct note{
int x,y;
string s;
}pos,q;
int n;
int check(int x,int y){
if(x < ||x >= n || y < || y >= n)return ;
return ;
}
void bfs(int x,int y,int ex,int ey){
string str[];
int ans = ;
vis[x][y] = ;
queue<note>que;
pos.s = "";
pos.x = x;
pos.y = y;
que.push(pos);
while(que.size()){
q = que.front();
que.pop();
if(q.x == ex && q.y == ey){
cout<<q.s<<endl;return;
}
for(int i = ; i < ; i++){
int dx = q.x + go[i][];
int dy = q.y + go[i][];
if(check(dx,dy) && !vis[dx][dy] && ma[dx][dy] != '#'){
//cout<<q.s<<endl;
pos.x = dx;
pos.y = dy;
if(i == ) pos.s = q.s + "D";
if(i == ) pos.s = q.s + "L";
if(i == ) pos.s = q.s + "R";
if(i == ) pos.s = q.s + "U";
que.push(pos);
vis[dx][dy] = ;
}
}
}
puts("-1");
return;
}
int main(){
int t;
for(scanf("%d",&t);t--;){
int sx,sy,ex,ey;
memset(vis,,sizeof(vis));
scanf("%d",&n);
for(int i = ; i < n ; i++){
scanf("%s",ma[i]);
for(int j = ; j < n ;j ++){
if(ma[i][j] == 'S'){
sx = i;sy = j;
}
if(ma[i][j] == 'T'){
ex = i;ey = j;
}
}
}
bfs(sx,sy,ex,ey);
}
}

TOJ3128传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3128

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 678            测试通过:202 Special Judge

现在我们来简化蛇的身体,假设初始化的时候蛇的身体只有一个头而已(呵,当然是假设的),那么蛇去吃食物的时候就不必考虑碰到自己的身体了。
例:

5 5
.....
S....
###.#
E....
#####

那么从S到E最短的走法是EEESSWWW。说明:N(north),S(south),W(west),E(east)。如果吃不到食物就输出Can't eat it!
注意:路径是最短的走的。

输入

输入数据有多组,每组输入的第一行是两个正整数R,C,表示行和列,3=<R,C<=100,下面输入R行C列的矩阵。

输入保证合法。

输出

每行输出最短的走法。

样例输入

5 5
.....
S....
###.#
E....
#####

样例输出

EEESSWWW

思路:这题也是广搜的入门题,也是对S开始进行广度优先搜素。因为是特判题,所以不需要考虑字典序,注意找不到的时候输出字符串"Can't eat it!"即可。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<vector>
#define LL long long
#include<assert.h>
using namespace std;
int go[][]={{,},{,-},{-,},{,}};
char ma[][];
int vis[][];
struct note{
int x,y;
string s;
}pos,q;
int n,m;
int check(int x,int y){
if(x < ||x >= n || y < || y >= m)return ;
return ;
}
void bfs(int x,int y,int ex,int ey){
vis[x][y] = ;
queue<note>que;
pos.s = "";
pos.x = x;
pos.y = y;
que.push(pos);
while(que.size()){
q = que.front();
que.pop();
if(q.x == ex && q.y == ey){
cout<<q.s<<endl;
return;
}
for(int i = ; i < ; i++){
int dx = q.x + go[i][];
int dy = q.y + go[i][];
if(check(dx,dy) && !vis[dx][dy] && ma[dx][dy] != '#'){
//cout<<q.s<<endl;
pos.x = dx;
pos.y = dy;
if(i == ) pos.s = q.s + "E";
if(i == ) pos.s = q.s + "W";
if(i == ) pos.s = q.s + "N";
if(i == ) pos.s = q.s + "S";
que.push(pos);
vis[dx][dy] = ;
}
}
}
puts("Can't eat it!");
return;
}
int main(){
int t;
while(~scanf("%d %d",&n,&m)){
int sx,sy,ex,ey;
memset(vis,,sizeof(vis));
for(int i = ; i < n ; i++){
scanf("%s",ma[i]);
for(int j = ; j < m ;j ++){
if(ma[i][j] == 'S'){
sx = i;sy = j;
}
if(ma[i][j] == 'E'){
ex = i;ey = j;
}
}
}
bfs(sx,sy,ex,ey);
}
}

TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇的更多相关文章

  1. OC版贪吃蛇

    昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些, ...

  2. JavaScript 实现简易版贪吃蛇(Day_13)

    时光永远在变迁,你始终要丢下过去. 使用语言 JavaScript  概述 运用JavaScript  实现简易版<贪吃蛇>.     Html 页面 1 <!DOCTYPE htm ...

  3. C#简单实现贪吃蛇程序(LinQ + Entity)

    做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity) 最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类 ...

  4. Java一个简单的贪吃蛇

    Java一个简单的贪吃蛇 虽然GUI已经要淘汰了,但是手动写写界面还是有助于理解语法的,像构造函数 ,函数调用,内部类,继承,接口.有助于半初学者强化理解. 直接上代码 游戏主体类: package ...

  5. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  6. GUI简单实战——贪吃蛇

    将前面学到的GUI基础知识完成实战,完成一个简单的贪吃蛇项目 项目功能 用键盘上下左右实现贪吃蛇的自动移动 贪吃蛇吃到食物后,长度加一,分数加一 贪吃蛇吃到自己的身体,则游戏结束 按空格键实现游戏的暂 ...

  7. js版贪吃蛇

    之前没有写博客的习惯,这是我的第一个博客,有些的不好的地方,希望大家多多提意见 js版的贪吃蛇相对比较简单,废话不多说直接上代码,有需要注意的地方我会标红,github源码地址https://gith ...

  8. 做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)

    最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类似的情况,白天一直想不通的问题,晚上做梦有时会想到更好的版本,于是 ...

  9. JavaScript版—贪吃蛇小组件

    最近在学习JavaScript,利用2周的时间看完了<JavaScript高级编程>,了解了Js是一门面向原型编程的语言,没有像C#语言中的class,也没有私有.公有.保护等访问限制的级 ...

随机推荐

  1. Linux 设置IP地址,并能连接外网

    1,如果是 centos6,请修改  vi /etc/sysconfig/network-scripts/ifcfg-eth0 2,如果是 centos7,请修改 => vi /etc/sysc ...

  2. day07-while,for循环

    1.循环语句 Python提供了for循环和while循环while在给定的判断条件为 true 时执行循环体,否则退出循环体.for重复执行语句嵌套循环可以在while循环体中嵌套for.while ...

  3. Aop 基础

    基础文献 https://blog.csdn.net/abcd898989/article/details/50809321 简单Demo配置 pom.xml <!-- AOP --> & ...

  4. 关于 C++ 默认构造函数 的几个误区 转载

    https://blog.csdn.net/ccrazyman/article/details/8138425

  5. css:清楚浮动

    这个清楚浮动的方法最常用,给浮动字元素的父盒子,也就是不浮动元素,添加一个lhearfix的类,其类的css样式为: .clearfix:after{ /*必须要写这三句话*/ content:''; ...

  6. 单件模式——Head First

    一.定义 单件模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点. 二.适用性 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 2.当这个唯一实 ...

  7. 在升级过内核的机器上安装docker遇到的一个错误

    出现了以下错误: [root@osd2 ~]# service docker start Starting cgconfig service: Error: cannot mount memory t ...

  8. How to Pronounce AR, ORN, etc.

    How to Pronounce AR, ORN, etc. Share Tweet Share The R consonant can be really tricky.  In this vide ...

  9. Redis进阶实践之五Redis的高级特性(转载 5)

    Redis进阶实践之五Redis的高级特性 一.引言 上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今 ...

  10. avalon1与avalon2的异同点

    avalon2并不向下兼容avalon1,但许多API与指令很相似,迁移成本比较低.此外,良好的性能与强大的功能是你迁移的动力.下面是一个列表,如有提问尽管提出. avalon1与avalon2的异同 ...