注意:小太阳的帕鲁世界ⅠⅡⅢ 仅在题目名称及背景有所关系,题目之间并无关系也不与难度挂钩。
小太阳来到了修行者瀑布,传说这里栖息着一只名为云海鹿的帕鲁,可以乘云驾雾,是这片大陆上速度最快的帕鲁,小太阳非常渴望拥有一只属于自己的云海鹿。可是众所周知的是,云海鹿躲藏在山体中的坑道里,坑道的路况太过复杂,小太阳在寻找云海鹿的过程中迷路了!
经过一番波折,小太阳终于逃出了坑道,然而他并不甘心,请你帮助小太阳找到从任意位置出发可以找到云海鹿的最短路径。
你处在一个大小为n∗m 的长方形矩阵上。矩阵的行从上到下编号为 1到n ,列从左到右编号为 1至m 。
矩阵的每个单元格上都写有一个符号"L"、"R"、"D"、"U",分别表示进入该单元格的方向必须向左、向右、向下或向上。
即如果当前单元格为 "L" ,你必须从这个单元格右边的格子出发才能到达该单元格。
找到从任意位置出发到达(n,m)的最短路径长度。
input:
第一行包括两个整数n,m(2000),分别表示矩阵的行数,列数。接下来n行每行包括m个字符(仅包括LRDU)表示该单元格上的符号。
output:
输出n行m列整数表示从(i,j)到达(n,m)的最短路径,若无法到达则输出-1.
#include<bits/stdc++.h>
using namespace std;
char a[2001][2001];
int ans[2001][2001];
int nn,mm;
void dfs(int n,int m,int b)
{
if(m>mm||m<1||n>nn||n<1)return ;
ans[n][m]=b;
char x;
x=a[n][m];
if(x=='L')dfs(n,m+1,++b);
if(x=='R')dfs(n,m-1,++b);
if(x=='U')dfs(n+1,m,++b);
if(x=='D')dfs(n-1,m,++b);
}
int main()
{
int n,m;
cin>>n>>m;
nn=n;mm=m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans[i][j]=-1;
dfs(n,m,0);
ans[n][m]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<ans[i][j]<<' ';
}
cout<<endl;
}
cout<<endl;
return 0;
}