问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 ( BFS )

问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫

时间限制: 1Sec 内存限制: 128MB 提交: 486 解决: 94

题目描述

学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。

输入

第一行两个整数n, m,为迷宫的长宽。
接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。

输出

第一行一个数为需要的最少步数K。
第二行K个字符,每个字符∈{U,D,L,R},分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。

样例输入

3 3
001
100
110

样例输出

4
RDRD

就是注意一下方向

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int  n,m;
int dx[] = {1,0,0,-1};
int dy[] = {0,-1,1,0};
char path[4]={'D' ,'L','R','U'};   
struct NODE{
	 int x,y,k;
	 string s;
} t;
vector< vector<int> > a;
int    ans = 999999;
string anspath;
void bfs( ){
    t.x =1;
	t.y =1;
	t.k =0;
	t.s ="";
	queue< struct NODE  > q;
	q.push( t );
	while( !q.empty() ){
           struct NODE tmp = q.front();
           if( tmp.x==n && tmp.y == m ){
           	   if( ans > tmp.k ){
           	       ans = tmp.k;
				   anspath = tmp.s;	  	 
               }
               else if( ans == tmp.k ){
               	    for( int i=0;i<anspath.length();i++){
               	    	 if( anspath[i] > tmp.s[i] ){
               	    	     anspath = tmp.s;
						     break;	
					     }
					}
			   } 
		   } 
		   q.pop();
		   for( int i=0;i<=3;i++){
		   	        t.x = tmp.x + dx[i];
				    t.y = tmp.y + dy[i];
					t.s = tmp.s + path[i];
					t.k = tmp.k + 1; 
					if( t.x>=1&&t.x<=n && t.y>=1&&t.y<=m && a[t.x][t.y] == 0 ){
						a[t.x][t.y] = 1;
						q.push( t ); 
					}		 
		   }	
	}	 
} 
int main(void){  
	cin>>n>>m; 
    a.resize(n+1);
    for( int i=0;i<=n;i++)
         a[i].resize( m +1 ); 
	for( int i=1;i<=n;i++){
		 string tt;
		 cin>>tt;
		 for( int  j=1;j<=m;j++){
		 	  if(  tt[j-1] == '0' )
		 	       a[i][j] = 0;
		 	  else a[i][j] = 1;    
		 }
	}  
	bfs( );
	cout<<ans<<endl<<anspath<<endl; 
	return 0;
} 
发布了742 篇原创文章 · 获赞 132 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/S_999999/article/details/103991483
今日推荐