专栏文章
题解:AT_abc405_d [ABC405D] Escape Route
AT_abc405_d题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipb58hg
- 此快照首次捕获于
- 2025/12/03 09:07 3 个月前
- 此快照最后确认于
- 2025/12/03 09:07 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int d[N][N];
char a[N][N];
struct node
{
int x;
int y;
int cnt;
};
int dx[] = {0,0,-1,1};
int dy[] = {-1,1,0,0};
char s[] = {'<','>','^','v'};
char b[N][N];
signed main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = 1;i<=n;i++)
{
scanf("%s",a[i]+1);
}
memset(d,0x3f,sizeof(d));
queue<node>q;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(a[i][j] == 'E')
{
q.push({i,j,0});
d[i][j] = 0;
}
}
}
while(q.size())
{
node num = q.front();
q.pop();
for(int i = 0;i<4;i++)
{
int r = num.x+dx[i];
int c = num.y+dy[i];
if(r>=1&&c>=1&&r<=n&&c<=m&&a[r][c]!='#'&&d[r][c]>d[num.x][num.y]+1)
{
d[r][c] = d[num.x][num.y]+1;
q.push({r,c,d[r][c]});
}
}
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
b[i][j] = a[i][j];
for(int k = 0;k<4;k++)
{
int r = i+dx[k];
int c = j+dy[k];
if(r>=1&&c>=1&&r<=n&&c<=m&&a[r][c]!='#'&&d[r][c] == d[i][j]-1)
{
b[i][j] = s[k];
break;
}
}
printf("%c",b[i][j]);
}
printf("\n");
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...