bfs两种记录路径方法
#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两种记录路径方法的更多相关文章
- GET和POST两种基本请求方法(转自博主--在途中#)
GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...
- 转:GET和POST两种基本请求方法的区别
原文地址:GET和POST两种基本请求方法的区别 原文如下: GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL ...
- 表格细边框的两种CSS实现方法
在网页制作中,细边框这个制作方法是必不可少的.这里介绍2种常见的表格细边框制作方法,均通过XHTML验证. <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- 两种HTTP请求方法:GET和POST的区别
之前在一些开发者平台使用网页调用API时,一再提到两种请求方法GET和POST,所以就去了解了下.那么这又不得不提到HTTP了! 一.什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户 ...
- 修改linux 两种时间的方法
1,整理了一下怎么修改linux 两种时间的方法. 硬件时间:hwclock 或者clock,设置的方法是 hwclock --set --date="05/12/2018 12:30:50 ...
- mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
win10很完美,用的也很舒服!当然人无完人,也总有不尽如人意的时候.比如说我们经常用的远程mstsc,就出现了一个坑,既然出现坑了,我们就得把坑解决掉吧!下面就记录一下这个坑的解决方法. 本文地址: ...
- GET和POST两种基本请求方法的区别
文章来源:http://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一 ...
- 迷宫问题 (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, ...
- GET和POST两种基本请求方法的区别(转)
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
随机推荐
- (Review cs231n) BN and Activation Function
CNN网络的迁移学习(transfer learning) 1.在ImageNet上进行网络的预训练 2.将最上方的层,即分类器移除,然后将整个神经网络看成是固定特征提取器来训练,将这个特征提取器置于 ...
- ansible常用命令大全
ansible 默认提供了很多模块来供我们使用.在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc -s ...
- UI自动化(六)js
HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...
- Codeforces 17E Palisection - Manacher
题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含 ...
- Always clear download 下载 谷歌浏览器插件
由于该博文不支持上传压缩包,因此,如有需要always clear download插件的可点击此链接在百度网盘上下载https://pan.baidu.com/s/13wWchis3iKqXkIA5 ...
- 利用jQuery实现用户名片小动画
我爱撸码,撸码使我感到快乐!大家好,我是Counter.下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了.至于CSS,个人觉得,这边CSS布局也蛮重 ...
- 【论文笔记】CBAM: Convolutional Block Attention Module
CBAM: Convolutional Block Attention Module 2018-09-14 21:52:42 Paper:http://openaccess.thecvf.com/co ...
- BOM简介
BOM简介 BOM Browser Object Model 浏览器对象模型 // 通过window对象来访问浏览器 console.log(window.document); // frames:当 ...
- Linux 软连接 (ln命令)
这是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件 ...
- 《温故而知新》JAVA基础四
类的封装 定义:将类的一些信息隐藏起来,不允许外部的程序直接的访问,而是通过该类提供的一些方法来获取 好处:只能通过特定的法方法访问数据,保护了数据, 实现封装的步骤: 修改属性的可见性:(一般类属性 ...