The Monocycle(bfs)
题目描述:




转载自:https://blog.csdn.net/h1021456873/article/details/54572767
题意:
给你一个转轮,有5种颜色,为了5中颜色的位置是确定的,为了方便处理我们用01234来表示绿,黑,红,蓝,白。轮子可以沿着它的方向滚动(只能是它当前的方向不能相反方向),每滚动一次会到达另一个格子,着地的颜色会改变,变了之前颜色的下一个,例如当前是绿色着地下一次就是黑色,依次是红蓝白。也可以原地转动(顺逆时针都可以),原地转动其实就是改变了轮子的滚动方向,原地转动每次能转90度。原地转动一次和滚动一次时间都是1秒。另外轮子有4个方向,上北下南左西又东。
思路: 开一个四维数组标记状态 f【x】【y】【d】【c】 在(x,y)点,方向为d,车轮的颜色为c的状态是否被标记过, 这个数组其实就是用来剪枝,避免陷入死循环!!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int N = ;
char s[N][N];
struct node
{
int x,y,d,c,time;
};
queue<node>que;
int f[N][N][][];
int n,m;
int dx[]={,-,,},dy[]={-,,,};
node e;
int bfs()
{
int i,j,x,y,d,c;
while(!que.empty()){
node t = que.front();
que.pop();
if(t.x==e.x && t.y==e.y && t.c==) return t.time;
////////先考虑转向/////////////////////
c=t.c;
d=(t.d+)%;
if(!f[t.x][t.y][d][c]){
f[t.x][t.y][d][c]++;
que.push((node){t.x,t.y,d,c,t.time+});
// printf("%d %d %d %d %d\n",t.x,t.y,d,c,t.time+1);
}
d=(t.d-+)%;
if(!f[t.x][t.y][d][c]) {
f[t.x][t.y][d][c]++;
que.push((node){t.x,t.y,d,c,t.time+});
// printf("%d %d %d %d %d\n",t.x,t.y,d,c,t.time+1);
}
////////考虑向前走////////////////////
c=(t.c+)%;
x=t.x+dx[t.d],y=t.y+dy[t.d],d=t.d;
if(x<||x>=n||y<||y>=m||s[x][y]=='#') continue;
if(f[x][y][d][c]) continue;
f[x][y][d][c]++;
que.push((node){x,y,d,c,t.time+});
// printf("%d %d %d %d %d\n",x,y,d,c,t.time+1);
}
return -;
} int main()
{
node start;
int i,j,T=;
while(scanf("%d%d",&n,&m)!=EOF) {
if(n== && m==) break;
if(T) printf("\n");
T++;
while(!que.empty()) que.pop();
memset(f,,sizeof(f));
for(i=;i<n;i++) {
scanf("%s",s[i]);
for(j=;j<m;j++) {
if(s[i][j]=='S') start.x=i,start.y=j;
if(s[i][j]=='T') e.x=i,e.y=j;
}
}
start.d=,start.c=,start.time=;
f[start.x][start.y][start.d][start.c]=;
que.push(start);
int ans=bfs();
printf("Case #%d\n",T);
if(ans<) printf("destination not reachable\n");
else printf("minimum time = %d sec\n",ans);
}
return ;
}
The Monocycle(bfs)的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- 基于C#net4.5websocket客户端与服务端
只支持win8以上系统以及windows server2012以上系统 最近在研究视频传输给浏览器,然后使用H5标签解码.视频流采用websocket传输.所以研究了一下C#的websocket. 首 ...
- GitHub访问慢
问题描述 一直都觉得访问 GitHub 时速度非常慢,刷新一下都要等好久!于是尝试一下能否解决掉... github.com assets-cdn.github.com avatar2.githubu ...
- Java9 新特性 详解
作者:木九天 < Java9 新特性 详解 > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...
- easyui生成合并行,合计计算价格
easyui生成合并行,合计计算价格 注:本文来源: 原创 一:图样你效果图 二:代码实现 1:datagrid 列展示: window.dataGrid = $("#dataGrid&qu ...
- mysql where和having的区别
简单描述:需要查询一个数量count,于是做分组查询后,发现有的数据没有过滤掉,于是就想加上过滤条件,就在group by后边写了where ,发现不好使,直接就报错了,查了一下,where只能写在g ...
- (批量更新)对多个符合条件的id做更新操作
需求描述:把checkbox勾选的对应id的记录的标志位置1或0,这个其实不难的,不过我自己做的话,肯定是多次访问数据库做更新,看了老大的代码,发现差距不是一般的大,老大把sql灵活运用,结果一次访问 ...
- python网络爬虫笔记(四)
一.python中的高阶函数算法 1.sorted()函数的排序 sorted()函数是一个高阶函数,还可以接受一个key函数来实现自定义的函数排序,key指定的函数作用于每个序列元素上,并根据k ...
- css中border画三角形
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- 饮冰三年-人工智能-Python-11之HelloWorld
1:安装不在介绍,下载软件下一步即可,配置环境变量(Python37会默认配置环境变量的) D:\Programs\Python\Python37\Scripts\;D:\Programs\Pytho ...
- C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Unnamed_08_upload\work\Catalina\localhost\ROOT这个错误是找不到temp文件
C:\Users\Administrator\.IntelliJIdea2017.3\system\tomcat\Unnamed_08_upload\work\Catalina\localhost\R ...