BFS+打印路径
题目是给你起点sx,和终点gx;牛在起点可以进行下面两个操作:
步行:John花一分钟由任意点X移动到点X-1或点X+1。
瞬移:John花一分钟由任意点X移动到点2*X。
你要输出最短步数及打印路径。
最短步数用bfs就行了。
至于路径,用一个结构体就可以去存每个点的父节点,再递归输出路径就行了。
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
#define MAX 100010
int sx,gx,ans;
struct mask
{
mask(int x,int step):x(x),step(step){};
int x,step,f;
};/
struct node
{
int x;
}p[MAX];//保存父节点
queue<mask>q;
int dx[]={1,-1};
int flag=0;
bool vis[MAX];
bool check(int r)
{
return (0<=r&&r<=MAX);
}
void bfs()
{
flag=0;
while(!q.empty())q.pop();
q.push(mask(sx,0));
memset(vis,false,sizeof(vis));
vis[sx]=true;//printf("%d\n",q.front());
while(q.size())
{
mask tmp=q.front();q.pop();
// printf("ok\n");
if(tmp.x==gx)
{
ans=tmp.step;
flag=1;
break;
}
for(int i=0;i<2;i++)
{
int nx=tmp.x+dx[i];
if(check(nx)&&!vis[nx])
{
vis[nx]=true;
p[nx].x=tmp.x;
q.push(mask(nx,tmp.step+1));
}
}
int nx1=tmp.x*2;
if(check(nx1)&&!vis[nx1])
{
vis[nx1]=true;
p[nx1].x=tmp.x;
q.push(mask(nx1,tmp.step+1));
}
}
}
void pri(int x1)
{
if(x1==sx){
printf("%d ",sx);
return ;
}
pri(p[x1].x);
printf("%d ",x1);
}
int main()
{
while(~scanf("%d %d",&sx,&gx)){
if(sx==-1&&gx==-1)break;
bfs();
if(flag)
printf("%d\n",ans);
else printf("-1\n");
pri(gx);
printf("\n");
}
}
BFS+打印路径的更多相关文章
- POJ 3414 Pots ( BFS , 打印路径 )
题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...
- Codeforces 3A-Shortest path of the king(BFS打印路径)
A. Shortest path of the king time limit per test 1 second memory limit per test 64 megabytes input s ...
- UVA-816.Abbott's Tevenge (BFS + 打印路径)
本题大意:给定一个迷宫,让你判断是否能从给定的起点到达给定的终点,这里起点需要输入起始方向,迷宫的每个顶点也都有行走限制,每个顶点都有特殊的转向约束...具体看题目便知... 本题思路:保存起点和终点 ...
- hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- POJ 3414--Pots(BFS+回溯路径)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9963 Accepted: 4179 Special Ju ...
- UVA-10480-Sabotage(最大流最小割,打印路径)
链接: https://vjudge.net/problem/UVA-10480 题意: The regime of a small but wealthy dictatorship has been ...
- HDU1026--Ignatius and the Princess I(BFS记录路径)
Problem Description The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has ...
- bfs输出路径 && 最短路(迪杰斯特拉)输出路径
问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #includ ...
- LCS(打印路径) POJ 2250 Compromise
题目传送门 题意:求单词的最长公共子序列,并要求打印路径 分析:LCS 将单词看成一个点,dp[i][j] = dp[i-1][j-1] + 1 (s1[i] == s2[j]), dp[i][j] ...
随机推荐
- Django 路由层与视图层
1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...
- 快速禁止Chrome浏览器缓存
在前端的开发中,最麻烦的莫过于浏览器的缓存,经常需要清理缓存文件,导致开发效率较低. 但Chrome可以一键禁止浏览器缓存,并且在后续的操作中,无论相同的资源请求多少次,都不会缓存到本地,一起来体验下 ...
- openstack stein部署手册 5. placement
# 建立数据库用户及权限 create database placement; grant all privileges on placement.* to placement@'localhost' ...
- linux--基础知识2
#超级用户root的家目录是/root ,而普通用户的家目录被存放在/home目录下 cd /目录 切换到指定目录 注意 / 是根目录 linux的一些重要目录 1.bin目录,用来存放常用的可执 ...
- 读书笔记一、pandas之series
转自 # 直接传入一组数据 from pandas import Series, DataFrame obj = Series([4, 2, 3]) obj 0 4 1 2 2 3 dtype: in ...
- 【rabbitmq】解决SimpleAmqpClient创建连接时阻塞的问题
https://blog.csdn.net/panxianzhan/article/details/50755409 https://blog.csdn.net/csm201314/article/d ...
- win7提示不是正版桌面变黑
1.以管理员身份运行cmd.exe 2.在该界面>后面输入SLMGR -REARM,大家注意下有个空格键 然后点击确定,重启电脑就OK了.
- 多线程AQS
参考: AQS原理分析 https://blog.csdn.net/javazejian/article/details/75043422 重入读写锁原理分析 https://blog.csdn.ne ...
- Pyhton---基础---递归
2019-05-21 ------------------------------------------- 一. #类似于栈的先进后出模式def digui(num): print(num) ...
- Windows系统安装教程
身边很多朋友电脑系统因为这样那样的问题不能开机,需要重装系统,但是又不知道从何下手.很不建议去电脑店重装系统,因为电脑店用的操作系统很多都有捆绑软件和主页捆绑,对电脑体验影响很坏.这篇教程只是针对新手 ...