#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. 2017-2018-1 20155228 《数学建模》 MatlabR2017a安装教程

    2017-2018-1 20155228MatlabR2017a安装教程 原版软件和破解补丁的下载 原版软件和破解补丁的下载链接 需要关注微信公众号才能获取下载密码,照办就是了,为了学习嘛哈哈哈 有三 ...

  2. windows 如何创建硬链接

    输入代码:mklink /d F:\ D:\pdf mklink /d 是命令语句,空格,接着是放置硬链接的位置,空格,再是目标文件夹.

  3. 关于使用MUI框架ashx获取值的问题

    前台如有 var value = '<%= value%>';  后台在使用  Params["value"]的时候会出现重复(例:value,value).

  4. css3 二维码 添加 扫描特效

    <section data-role="paragraph" class="_135editor" style="border: 0px non ...

  5. poj2142 The Balance

    poj2142 The Balance exgcd 应分为2种情况分类讨论 显然我们可以列出方程 ax-by=±d 当方程右侧为-d时,可得 by-ax=d 于是我们就得到了2个方程: ax-by=d ...

  6. 数据库分区分表(sql、mysql)

    http://blog.csdn.net/lgb934/article/details/8662956 http://www.2cto.com/database/201503/380348.html ...

  7. GIT操纵

    简易的命令行入门教程: Git 全局设置: git config --global user.name "XXX" git config --global user.email & ...

  8. Visual Studio 2017 配置导出/导入/重置

    1.打开VS,按下面的快捷键呼出命令窗口 Ctrl+Alt+A 2.导入/导出/重置命令 Tools.ImportandExportSettings [/export:filename | /impo ...

  9. Windows 启用/禁用内置管理员 Administrator

    关于启用 Windows 系统内置的管理员 Administrator 的方法还是许多的,其中普遍的一种应该就是进入(我的电脑/计算机右键管理/Windows + R输入 compmgmt.msc)计 ...

  10. Mongo数据库操作/数据库版本号

    第一步,找到mongodb安装目录第二步,从命令行进入mongodb安装目录下的bin目录 附:http://www.runoob.com/mongodb/mongodb-create-databas ...