题目链接:http://codeforces.com/contest/811/problem/D

题意:现在给你一个n*m大小的图,你输出一个方向之后,系统反馈给你一个坐标,表示走完这步之后到的位子,我们需要在2*n*m步之内走到终点,问怎样走才行(多解输出任意一个即可)。我们一开始的位子是(1,1),终点位子是“F”,‘*’表示不能走的位子,游戏开始的时候,有一些小伙伴比较调皮,会将U和D互换,就是说假设我们操作了U,但是实际是走到了D.或者也可能将L和R互换,当然也可能都没有互换过,当然也可能都互换过。然你模拟整个过程。

题解:其实很简单,先确定路线,然后在模拟,方向看他反馈的来确定有没有变,然后就是简单的模拟一下。

#include <iostream>
#include <queue>
#include <stack>
#include <cstring>
using namespace std;
char mmp[110][110];
struct TnT {
int x , y;
}pre[110][110];
int dr[4][2] = {1 , 0 , -1 , 0 , 0 , 1 , 0 , -1} , n , m;
bool vis[110][110];
TnT bfs(TnT sta , TnT ed) {
memset(vis , false , sizeof(vis));
queue<TnT>q;
q.push(sta);
vis[sta.x][sta.y] = true;
while(!q.empty()) {
TnT gg = q.front();
q.pop();
if(gg.x == ed.x && gg.y == ed.y) {
return gg;
}
for(int i = 0 ; i < 4 ; i++) {
TnT gl = gg;
gl.x += dr[i][0];
gl.y += dr[i][1];
if(gl.x >= 0 && gl.x < n && gl.y >= 0 && gl.y < m && mmp[gl.x][gl.y] != '*' && !vis[gl.x][gl.y]) {
vis[gl.x][gl.y] = true;
pre[gl.x][gl.y].x = gg.x;
pre[gl.x][gl.y].y = gg.y;
q.push(gl);
}
}
}
return ed;
}
int main() {
cin >> n >> m;
TnT sta , ed;
for(int i = 0 ; i < n ; i++) {
cin >> mmp[i];
for(int j = 0 ; j < m ; j++) {
if(mmp[i][j] == 'F') {ed.x = i , ed.y = j;}
}
}
sta.x = 0 , sta.y = 0;
TnT gg = bfs(sta , ed);
stack<TnT>gl;
while(gg.x != 0 || gg.y != 0) {
gl.push(gg);
int x = gg.x , y = gg.y;
gg.x = pre[x][y].x;
gg.y = pre[x][y].y;
}
cout << endl;
TnT pos = sta;
char ff[4] = {'L' , 'U' , 'D' , 'R'};
bool flag[2];
flag[0] = flag[1] = false;
while(!gl.empty()) {
TnT gb = gl.top();
if(gb.y < pos.y) {
cout << ff[0] << endl;
int x , y;
cin >> x >> y;
x--,y--;
if(x == gb.x && y == gb.y) {gl.pop() , pos = gb; continue;}
else {
if(!flag[0]) {
char cp = ff[0];
ff[0] = ff[3];
ff[3] = cp;
flag[0] = true;
}
}
}
if(gb.y > pos.y) {
cout << ff[3] << endl;
int x , y;
cin >> x >> y;
x--,y--;
if(x == gb.x && y == gb.y) {gl.pop() , pos = gb; continue;}
else {
if(!flag[0]) {
char cp = ff[3];
ff[3] = ff[0];
ff[0] = cp;
flag[0] = true;
}
}
}
if(gb.x < pos.x) {
cout << ff[1] << endl;
int x , y;
cin >> x >> y;
x--,y--;
if(x == gb.x && y == gb.y) {gl.pop() , pos = gb; continue;}
else {
if(!flag[1]) {
char cp = ff[1];
ff[1] = ff[2];
ff[2] = cp;
flag[1] = true;
}
}
}
if(gb.x > pos.x) {
cout << ff[2] << endl;
int x , y;
cin >> x >> y;
x--,y--;
if(x == gb.x && y == gb.y) {gl.pop() , pos = gb; continue;}
else {
if(!flag[1]) {
char cp = ff[1];
ff[1] = ff[2];
ff[2] = cp;
flag[1] = true;
}
}
}
}
return 0;
}

codeforces 811 D. Vladik and Favorite Game(bfs水题)的更多相关文章

  1. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  2. hdu1240 bfs 水题

    原题链接 思路:水题,直接搜 #include "map" #include "queue" #include "math.h" #incl ...

  3. Codeforces Round #334 (Div. 2) A. Uncowed Forces 水题

    A. Uncowed Forces Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/604/pro ...

  4. Codeforces Round #115 B. Plane of Tanks: Pro 水题

    B. Plane of Tanks: Pro Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/17 ...

  5. Codeforces Beta Round #14 (Div. 2) A. Letter 水题

    A. Letter 题目连接: http://www.codeforces.com/contest/14/problem/A Description A boy Bob likes to draw. ...

  6. codeforces 14A - Letter & codeforces 859B - Lazy Security Guard - [周赛水题]

    就像title说的,是昨天(2017/9/17)周赛的两道水题…… 题目链接:http://codeforces.com/problemset/problem/14/A time limit per ...

  7. Codeforces Round #353 (Div. 2) A. Infinite Sequence 水题

    A. Infinite Sequence 题目连接: http://www.codeforces.com/contest/675/problem/A Description Vasya likes e ...

  8. codeforces 811 E. Vladik and Entertaining Flags(线段树+并查集)

    题目链接:http://codeforces.com/contest/811/problem/E 题意:给定一个行数为10 列数10w的矩阵,每个方块是一个整数, 给定l和r 求范围内的联通块数量 所 ...

  9. codeforces 811 C. Vladik and Memorable Trip(dp)

    题目链接:http://codeforces.com/contest/811/problem/C 题意:给你n个数,现在让你选一些区间出来,对于每个区间中的每一种数,全部都要出现在这个区间. 每个区间 ...

随机推荐

  1. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  2. JSON合并,并按时间排序

    mergeJson: function (json1, json2) { var json = Object.assign([], json1, json2); return json.sort(fu ...

  3. 使用nginx代理centos yum 源

    我们在安装centos 服务器时,可能会有以下情况: 局域网内有若干台服务器,但是只有一台服务器可以连接外网,其余服务器都不可以连接外网,但通过局域网与外网机器联通. 那么我们再使用 yum 安装软件 ...

  4. 深入理解struts的运行机制

    扫码关注公众号,不定期更新干活 在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化 ...

  5. laravel新项目报错 No application encryption key has been specified.

    解决办法, 若文件根目录下没有 .env 1..env.example 改名使用命令 copy 修改为 .env 2.使用命令 php artisan key:generate  获取密码,自动保存到 ...

  6. bootstrap实战练习中涉及的知识点(很有用哦!)

    看的有关视频做的笔记,对bootstrap中涉及的知识点做了一定的解析,很有用哦!(新手上路,有不合适的地方可以指出哦!) 下面进入正题: Bootstrap是当下最流行的前端框架(界面工具集) 特点 ...

  7. cs231n---强化学习

    介绍了基于价值函数和基于策略梯度的两种强化学习框架,并介绍了四种强化学习算法:Q-learning,DQN,REINFORCE,Actot-Critic 1 强化学习问题建模 上图中,智能体agent ...

  8. Kubernetes-保障集群内节点和网络安全

    13.1.在pod中使用宿主节点的Linux命名空间 13.1.1.在pod中使用宿主节点的网络命名空间 在pod的yaml文件中就设置spec.hostNetwork: true 这个时候pod使用 ...

  9. thinkPhP 引入Smarty模板引擎及配置

    做配置:  TMPL_ENGINE_TYPE = “Smarty” 给smarty做配置: TMPL_ENGINE_CONFIG = array( 左标记, 右标记, )

  10. 部分APP无法代理抓包的原因及解决方法

    引言 HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛. ...