传送门 :
B.机器人走迷宫
t
a
g
:
tag:
tag: 简单好题
bfs&&dfs
模拟
题意 : 给定一个含有路障和单个终点和起点的网格,给定一个 0123 0123 0123的字符串,表示机器人的运动方式,让你给 0 , 1 , 2 , 3 0,1,2,3 0,1,2,3标定方向,询问有多少种方式可以从起点走到终点
思路 : 显然,这题就是先 d f s dfs dfs排列出所有的方式,然后再用 b f s bfs bfs判断(虽然我用的不是
但是怎么处理方向问题呢 ? ? ?
我们考虑使用两个 m a p map map,第一个用来映射方向,第二个用来映射字符串
即 D [ i ] = p [ i ] 当 前 的 排 列 中 ′ i ′ 表 示 ′ p [ i ] ′ D[i]=p[i] 当前的排列中'i'表示'p[i]' D[i]=p[i]当前的排列中′i′表示′p[i]′ m p [ i ] = { 0 , − 1 } 表 示 ′ i ′ 的 方 向 是 向 下 mp[i]=\{0,-1\} 表示'i'的方向是向下 mp[i]={0,−1}表示′i′的方向是向下
然后判断即可
code :
map mp;
map D;
const int N = 60,M = 60;
int ans;
int p[5],st[5];
int n,m;
char g[N][M];
string s;
int sx,sy;
int ex,ey;
void init(){
mp[0]={0,1};
mp[1]={1,0};
mp[2]={0,-1};
mp[3]={-1,0};
}
bool bfs(){
int tx = sx;
int ty = sy;
for(auto _s : s){
tx +=mp[D[_s-'0']].x;
ty +=mp[D[_s-'0']].y;
if(g[tx][ty] == '#')return false;
if(tx > n || txm || ty>m;
ans = 0 ;
for(int i=1;ig[i][j];
if(g[i][j] == 'S') sx = i ,sy = j;
if(g[i][j] == 'E') ex = i ,ey = j;
}
cin>>s;//cin>>s;
dfs(0);
coutm;
cin>>(w+1);
for(int i=1;i>a>>b;
g[a].pb(b);
in[b]++;
}
if(!topsort()) cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?