#include<cstdio>
#include<queue>
using namespace std;
struct sss
{
int x,y;
}ans[][];
int map[][];
int flag[][];
int dec[][]={,,,,-,,,-};
void print(struct sss q)
{
if(q.x==&&q.y==)
{
printf("(0, 0)\n");
return;
}
else
{
print(ans[q.x][q.y]);
printf("(%d, %d)\n",q.x,q.y);
}
}
void bfs(int x,int y)
{
struct sss q;
queue<struct sss> s;
flag[][]=;
q.x=x;
q.y=y;
s.push(q);
ans[][].x=-;
ans[][].y=-;
while(!s.empty())
{
q=s.front();
s.pop();
if(q.x==&&q.y==)
{
print(q);
return;
}
for(int i=;i<;i++)
{
int xx=dec[i][]+q.x;
int yy=dec[i][]+q.y;
if(xx>=&&xx<&&yy>=&&yy<&&flag[xx][yy]==&&map[xx][yy]==)
{
struct sss w;
w.x=xx;
w.y=yy;
s.push(w);
flag[xx][yy]=;
ans[xx][yy].x=q.x;
ans[xx][yy].y=q.y;
}
}
}
}
int main()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
scanf("%d",&map[i][j]);
}
}
bfs(,);
}
#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<string>
using namespace std;
typedef long long ll;
char mp[][];
int n,m,k;
int flag;
int d[][];
char jg[];
char yx[];
int dis[][]={,,,-,,,-,};
char str[]={"DLRU"};
void pan(int x,int y){
//printf("k=%d\n",k);
int tmp=k;
for(int i=;i<k;i++){
int dex=-;
for(int j=;j<;j++){
pair<int,int> z;
z.first=x+dis[j][];
z.second=y+dis[j][];
if(z.first>=&&z.first<n&&z.second>=&&z.second<m&&mp[z.first][z.second]!='*'&&d[z.first][z.second]<tmp){
dex=j;
break;
}
}
tmp--;
x=x+dis[dex][];
y=y+dis[dex][];
jg[i]=str[dex];
}
jg[k]='\0';
printf("%s\n",jg);
}
void bfs(int x,int y)
{
queue<pair<int,int> > q;
q.push(make_pair(x,y));
for(int i=;i<;i++){
for(int j=;j<;j++)
d[i][j]=;
}
int num=;
d[x][y]=;
while(!q.empty()){
pair<int,int> w=q.front();
q.pop();
num++;
for(int i=;i<;i++){
pair<int,int> z;
z.first=w.first+dis[i][];
z.second=w.second+dis[i][];
if(z.first>=&&z.first<n&&z.second>=&&z.second<m&&mp[z.first][z.second]=='.'){
if(d[z.first][z.second]>d[w.first][w.second]+){
d[z.first][z.second]=d[w.first][w.second]+;
q.push(z);
}
}
}
}
/*for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(d[i][j]==10000000) printf("%4d",-1);
else printf("%4d",d[i][j]);
}
printf("\n");
}*/
// printf("num=%d\n",num);
if(num==) printf("IMPOSSIBLE");
else pan(x,y);
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<n;i++){
scanf("%s",mp[i]);
}
if(k%){
printf("IMPOSSIBLE");
return ;
}
int vis=;
for(int i=;i<n;i++){
for(int j=;j<m;j++)
{
if(mp[i][j]=='X')
{
mp[i][j]='.';
bfs(i,j);
vis=;
break;
}
}
if(vis) break;
}
}

bfs两种记录路径方法的更多相关文章

  1. GET和POST两种基本请求方法(转自博主--在途中#)

    GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...

  2. 转:GET和POST两种基本请求方法的区别

    原文地址:GET和POST两种基本请求方法的区别 原文如下: GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL ...

  3. 表格细边框的两种CSS实现方法

    在网页制作中,细边框这个制作方法是必不可少的.这里介绍2种常见的表格细边框制作方法,均通过XHTML验证. <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  4. 两种HTTP请求方法:GET和POST的区别

    之前在一些开发者平台使用网页调用API时,一再提到两种请求方法GET和POST,所以就去了解了下.那么这又不得不提到HTTP了! 一.什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户 ...

  5. 修改linux 两种时间的方法

    1,整理了一下怎么修改linux 两种时间的方法. 硬件时间:hwclock 或者clock,设置的方法是 hwclock --set --date="05/12/2018 12:30:50 ...

  6. mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法

    win10很完美,用的也很舒服!当然人无完人,也总有不尽如人意的时候.比如说我们经常用的远程mstsc,就出现了一个坑,既然出现坑了,我们就得把坑解决掉吧!下面就记录一下这个坑的解决方法. 本文地址: ...

  7. GET和POST两种基本请求方法的区别

    文章来源:http://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一 ...

  8. 迷宫问题 (bfs广度优先搜索记录路径)

    问题描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, ...

  9. GET和POST两种基本请求方法的区别(转)

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

随机推荐

  1. .Net 多线程 (1) Task

    多线程是一种有效提高程序工作效率的方法.当然为了效率需要使用更多的cpu,内存等资源. 并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,如果串行,一个队列使用一台咖啡机,那么哪怕前 ...

  2. noip单词接龙

    看了许多题解都好长啊,自不量力的来贴一下代码 (震惊于这都能ac...) 这道题的思路是先从字符串中找有重部分然后直接比较剩下的部分,比较的数据也可以用来计算数值 其实满水的题 总之看注释啦(竟然能耐 ...

  3. 基于注解的Spring事务配置

    spring采用@Transactional注解进行事务申明,@Transactional既可以在方法上申明,也可以在类上申明,方法申明优先于类申明. 1.pom配置 包括spring核心包引入以及s ...

  4. vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题

    vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 今天下载了一个开源项目一直运行不了,折腾了半天才找到问题所在,config ...

  5. python的优点

    在当下编程语言繁多,选择python是因为他存在这许多的优点: Python是一种效率极高的语言:相比于众多其他的语言,使用Python编写时,程序包含的代码行更少.Python的语法也有助于创建整洁 ...

  6. idea 报错 :error:java:Compilation failed:internal java compiler error

    当使用Tomcat运行项目时报错 翻译一下是 错误:Java:编译失败:内部Java编译器错误 这样看来更不理解了 其实原因是Java的版本不一致 查看项目的jdk版本是否一致: file----pr ...

  7. Python 面向对象介绍

    面向对象,面向过程 面向对象引子 人狗大战,人与狗都有不同的特点,如果要写出这两个不同角色 需要写出两个角色,可以使用嵌套函数,函数内在写入函数,然后通 过字典,将里层函数reture出来,在调用. ...

  8. JavaScript自定义求和函数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter,当看到这个标题到时候是不是感觉很简单,千万不要大意哦,你说0.1 + 0.2 = 0.3 ?有时候计算机并不是我们所说绝对精确,这个时候就要我们 ...

  9. 最新版的Chrome如何始终开启flash而不是先询问?

     链接:https://www.zhihu.com/question/266170237/answer/342137190  设置Chrome启用Flash,修改配置之前先看Chrome的版本,不同版 ...

  10. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! --主机密钥验证失败

    1.错误出现在更换服务器操作系统后,使用ssh指令连接服务器时报错:ECDSA主机密钥发生改变,导致主机密钥验证失败! 2.解决方式一 使用指令:$ ssh-keygen -R  主机IP 如:$ s ...