这是个bfs

首先建图,先从终点bfs求出每点距离,然后从起点开始,确定初始方向:某点和自己相邻距离比自己小1就是

然后就先贪心和上次一样的方向,如果不能走,就找出一个方向,把自己当前方向改掉,重复过程,直到走到终点

#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
string s;
const int dx[]={-,,,},dy[]={,,-,};
int n,m;
int can[][][];
int used[][],d[][];
bool inrange(int x,int y)
{
return (x>=&&y>=&&x<=m&&y<=n);
}
void bfs()
{
queue<int>q;
q.push(m);
q.push(n);
used[m][n]=;
while(!q.empty())
{
int x=q.front(); q.pop();
int y=q.front(); q.pop();
for(int i=;i<;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(!used[xx][yy]&&inrange(xx,yy)&&can[x][y][i])
{
d[xx][yy]=d[x][y]+;
q.push(xx); q.push(yy);
used[xx][yy]=;
}
}
}
}
void get_path()
{
int x=,y=,last;//0:南 1:北 2:西 3:东
if(can[x][y][]&&d[x][y]==d[x+dx[]][y+dy[]]+)
{
x++; cout<<"N"<<endl; last=;
}
else if(can[x][y][]&&d[x][y]==d[x+dx[]][y+dy[]]+)
{
y++; cout<<"E"<<endl; last=;
}
while(x!=m||y!=n)
{
if(can[x][y][last]&&d[x+dx[last]][y+dy[last]]==d[x][y]-)
{
x=x+dx[last]; y=y+dy[last]; cout<<"F";
}
else
for(int i=;i<;i++)
{
if(can[x][y][i]&&d[x+dx[i]][y+dy[i]]==d[x][y]-)
{
x=x+dx[i]; y=y+dy[i];
if(last==)
{
if(i==) cout<<"R";
if(i==) cout<<"L";
}
if(last==)
{
if(i==) cout<<"L";
if(i==) cout<<"R";
}
if(last==)
{
if(i==) cout<<"L";
if(i==) cout<<"R";
}
if(last==)
{
if(i==) cout<<"R";
if(i==) cout<<"L";
}
last=i; break;
}
}
}
}
int main()
{
freopen("straight.in","r",stdin);
freopen("straight.out","w",stdout);
scanf("%d%d",&m,&n); cin.ignore();
for(int i=m;i>=;i--)
{
getline(cin,s,'\n');
for(int j=;j<s.length();j+=)
{
if(s[j]=='-')
{
can[i][(j+)/][]=;
can[i][(j+)/+][]=;
}
}
if(i!=)
{
getline(cin,s,'\n');
for(int j=;j<s.length();j+=)
{
if(s[j]=='|')
{
can[i][j/+][]=;
can[i-][j/+][]=;
}
}
}
}
bfs();
get_path();
fclose(stdin);
fclose(stdout);
return ;
}

100200H的更多相关文章

  1. 工作中MySql的了解到的小技巧

    工作中MySql的小技巧 1. 跑脚本时,经常遇到有则更新无插入的 逻辑操作:通常情况下,来一波if()判断然后选择 更新还是插入,前两天逛论坛时发现有人在比较REPLACE INTO 和 INSET ...

随机推荐

  1. Windows系统Stunnel客户端的配置

    Stunnel官方就有Windows版本,到下面的地址下载: https://www.stunnel.org/downloads.html 选择”stunnel-X.XX-installer.exe“ ...

  2. java 28 - 6 JDK7的新特性

    JDK7的新特性: 二进制字面量 数字字面量可以出现下划线 switch 语句可以用字符串 泛型简化 异常的多个catch合并 try-with-resources 语句 二进制字面量 JDK7开始, ...

  3. 隐写技巧——利用JPEG文件格式隐藏payload

    0x00 前言 继续对图片隐写技巧的学习,这次是对JPEG文件格式的学习和理解.同PNG文件的格式对比,JPEG文件相对简单,读取其中隐藏payload的方式大同小异,两者区别在于文件格式不同,可供利 ...

  4. 关于ubuntu的sources.list总结

    一.作用 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器的地址.和sources.list功能一样的是/etc/apt/sources. ...

  5. CentOS RHEL 安装 Tomcat 7

    http://www.davidghedini.com/pg/entry/install_tomcat_7_on_centos This post will cover installing and ...

  6. 数据表格 - DataGrid - 列表显示

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding=& ...

  7. 【点滴积累,厚积薄发】windows schedule task中.exe程序的路径问题等问题总结

    1.在发布ReportMgmt的Job时遇到一个路径问题,代码如下: doc.Load(@"Configuration\Business\business.config");   ...

  8. 127.0.0.1、0.0.0.0和本机IP地址的区别和使用

    一.表面上的区别如下: 首先假设本机有多个网卡:eth0 :192.168.0.1       eth1:192.168.1.1     lo: 127.0.0.1 0.0.0.0 不能ping通,代 ...

  9. caffe的python接口学习(3):训练模型(training)

    如果不进行可视化,只想得到一个最终的训练model, 那么代码非常简单,如下 : import caffe caffe.set_device(0) caffe.set_mode_gpu() solve ...

  10. Alpha版本发布说明

    软件发布的同时,在团队博客上写一个发布说明     ▪ 列出这一版本的新功能     ▪ 这一版本修复的缺陷     ▪ 对运行环境的要求     ▪ 安装方法     ▪ 描述系统已知的问题和限制 ...