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传递参数. 你可能自己 ...
随机推荐
- poj3155 最大密度子图
求最大密度子图 记得在最后一次寻找的时候记得将进入的边放大那么一点点,这样有利于当每条边都满流的情况下会选择点 #include <iostream> #include <algor ...
- 【转】Jira插件安装
一.Jira插件列表(可以将下面免费插件直接下载,然后登陆jira,在"插件管理"->"上传插件",将下载后的免费插件直接进行上传安装即可) 序号 插件名 ...
- Kubernetes容器上下文环境
目录贴:Kubernetes学习系列 下面我们将主要介绍运行在Kubernetes集群中的容器所能够感知到的上下文环境,以及容器是如何获知这些信息的. 首先,Kubernetes提供了一个能够让容器感 ...
- hdu5029 Relief grain
题目链接 树剖+线段树 将区间修改转化为单点修改,因为如果按DFS序进行修改,那么一定会对DFS序更大的点造成影响 #include<iostream> #include<vecto ...
- 基于Docker的GoldenGate部署
前言 Docker最近几年异常火爆,主要是因为其方便.快捷.轻量,相对于VM,它不需要占用太多资源,随时可以创建.删除,或在已有image上添加一些软件,再制作成另一个模板image供日后使用.Doc ...
- MySQL删除命令_DELETE
单表删除语句: DELETE [LOW_PRIORITY][IGNORE] FROM tbl_name [WHERE where_definition] [ORDER BY ...] ...
- LOJ #10130 点的距离
在LOJ做的第一道题. 最开始想复杂了qwq 想的是在求LCA的过程中统计向上的步数 其实此题很裸--就是求出u,v的LCA, 再分别用两点深度减去LCA的深度,再加起来就好了qwq---化简--- ...
- iptables 扩展匹配 第三章
获取帮助: centos 6 :man iptables centos 7: man iptables-extensions 扩展匹配: 隐式扩展:当使用-p指定某一协议之后,协议自身所支持的扩展就叫 ...
- nginx ssl 卸载功能 第八章
一 .证书自签发和给web 服务签发证书 .ssl 证书加密文件 ****************************** 建立私有CA openCA openssl 证书申请及签署步骤 .生成证 ...
- vim自动补全头注释与说明
做个笔记吧. .vimrc autocmd BufNewFile *.c,*.cpp,*.sh,*.py,*.java exec ":call SetTitle()" " ...