您当前的位置: 首页 > 

*DDL_GzmBlog

暂无认证

  • 1浏览

    0关注

    605博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[AcWing] 第 13 场周赛

*DDL_GzmBlog 发布时间:2022-04-30 12:11:49 ,浏览量:1

前言

传送门 :

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            
关注
打赏
1657615554
查看更多评论
0.0458s