#include<stdio.h>
#include<string.h>
const int dy[4]={-1,0,1,0};
const int dx[4]={0,1,0,-1};
// U R D L
char a[12][12];
bool e[12][12][4];
bool f[12][12];
int ans;
int n,m;
void dfs(int y,int x,int d)
{
if(e[y][x][d])return;
e[y][x][d]=1;
if(f[y][x]==0)
{
f[y][x]=1;
++ans;
}
int yy=y+dy[d];
int xx=x+dx[d];
if(yy>=1&&yy<=n&&xx>=1&&xx<=m&&a[yy][xx]!='*')dfs(yy,xx,d);
else dfs(y,x,(d+1)%4);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
memset(e,0,sizeof(e));
memset(f,0,sizeof(f));
ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='U')dfs(i,j,0);
else if(a[i][j]=='R')dfs(i,j,1);
else if(a[i][j]=='D')dfs(i,j,2);
else if(a[i][j]=='L')dfs(i,j,3);
}
}
printf("%d\n",ans);
}
}
/*
【题意】
给你一个n(10)*m(10)的地图,格子的障碍物为'*'。
有一个机器人,初始是'U'|'R'|'D'|'L'|中的一个,代表方向。
这个机器人每次都就向前走,遇到障碍物就右转。
在经过无限时间后,能走过的格子数是多少
【类型】
模拟
【分析】
这题虽然给的是迷宫,但不是bfs-迷宫搜索,而是暴力模拟。
因为——我们的决策是固定的!
状态数只有4nm,重复的话就一定是遇到循环节了。
这样就可以AC啦。
但是,对于方向的定义,一定要想好,顺时针,上右下左=0123,不要在这里浪费时间。
【时间复杂度&&优化】
O(4nm)
*/
【2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest J】【暴力模拟】Cleaner Robot 机器人行走 决策固定
最新推荐文章于 2020-04-09 12:22:11 发布