我命由我不由天
(ゴテンクス)
1
题面:
我的代码:
#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
I AK IOI;
int n,m,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char mapa[2005][2005];
struct node{
int x,y;
}st,en;
int bfs(){
queue<node>q;
q.push({st.x,st.y});
int vis[2005][2005];
memset(vis,-1,sizeof vis);
vis[st.x][st.y]=0;
while(!q.empty()){
node t=q.front();
q.pop();
if(t.x==en.x&&t.y==en.y)return vis[t.x][t.y];
for(int i=0;i<4;i++){
int nx=t.x+dx[i],ny=t.y+dy[i];
if(nx>0&&nx<=n&&ny>0&&ny<=m&&vis[nx][ny]==-1&&mapa[nx][ny]!='#'){
vis[nx][ny]=vis[t.x][t.y]+1;
q.push({nx,ny});
}
}
}
return -1;
}
int main(){
//freopen("","r",stdin);
//freopen("","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mapa[i][j];
if(mapa[i][j]=='S'){
st.x=i;
st.y=j;
}
if(mapa[i][j]=='G'){
en.x=i;
en.y=j;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapa[i][j]=='<')for(int k=1;k<=j;k++)if(mapa[i][k]=='.')mapa[i][k]='#';
if(mapa[i][j]=='>')for(int k=j;k<=m;k++)if(mapa[i][k]=='.')mapa[i][k]='#';
if(mapa[i][j]=='^')for(int k=1;k<=i;k++)if(mapa[k][j]=='.')mapa[k][j]='#';
if(mapa[i][j]=='v')for(int k=i;k<=n;k++)if(mapa[k][j]=='.')mapa[k][j]='#';
}
}
cout<<bfs();
i_ak ioi;
}
WA90 的代码,我测的本地不输出?为什么在 xyd 会输出,并且为什么 90?
黄飞栋
(一堆果冻)
4
这里应该不能只判断mapa[nx][ny]!='#'
,应该是mapa[nx][ny]=='.'
我命由我不由天
(ゴテンクス)
6
@黄飞栋 e你能解决一下我的代码本地不输出的原因吗?
我命由我不由天
(ゴテンクス)
8
@黄飞栋 你这里确定是mapa[nx][ny]!='.'
?
我命由我不由天
(ゴテンクス)
10
@黄飞栋 但是你这样判断不可走路径里S和G也被算上了呀,这肯定不对吧
我命由我不由天
(ゴテンクス)
11
@黄飞栋 我考虑到了呀,代码里我也算上了呀,在for循环里面我就特殊的加上了
黄飞栋
(一堆果冻)
12
改成 (mapa[nx][ny]=='.'||mapa[nx][ny]=='S'||mapa[nx][ny]=='G')
试试
我命由我不由天
(ゴテンクス)
13
@黄飞栋 等一下,我可能知道哪里错了,好像是for循环忘记特判了
我命由我不由天
(ゴテンクス)
17
@黄飞栋 等一下我之前的代码测试点6有问题,现在这是我的最新代码:
#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
I AK IOI;
int n,m,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char mapa[2005][2005];
struct node{
int x,y;
}st,en;
int bfs(){
queue<node>q;
q.push({st.x,st.y});
int vis[2005][2005];
memset(vis,-1,sizeof vis);
vis[st.x][st.y]=0;
while(!q.empty()){
node t=q.front();
q.pop();
if(t.x==en.x&&t.y==en.y)return vis[t.x][t.y];
for(int i=0;i<4;i++){
int nx=t.x+dx[i],ny=t.y+dy[i];
if(nx>0&&nx<=n&&ny>0&&ny<=m&&vis[nx][ny]==-1&&mapa[nx][ny]!='#'){
vis[nx][ny]=vis[t.x][t.y]+1;
q.push({nx,ny});
}
}
}
return -1;
}
int main(){
//freopen("","r",stdin);
//freopen("","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mapa[i][j];
if(mapa[i][j]=='S'){
st.x=i;
st.y=j;
}
if(mapa[i][j]=='G'){
en.x=i;
en.y=j;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapa[i][j]=='<'){
for(int k=1;k<j;k++)if(mapa[i][k]=='.')mapa[i][k]='#';
mapa[i][j]='#';
}
if(mapa[i][j]=='>'){
for(int k=j;k<m;k++)if(mapa[i][k]=='.')mapa[i][k]='#';
mapa[i][j]='#';
}
if(mapa[i][j]=='^'){
for(int k=1;k<i;k++)if(mapa[k][j]=='.')mapa[k][j]='#';
mapa[i][j]='#';
}
if(mapa[i][j]=='v'){
for(int k=i;k<n;k++)if(mapa[k][j]=='.')mapa[k][j]='#';
mapa[i][j]='#';
}
}
}
cout<<bfs();
i_ak ioi;
}
还是WA90 测试点6好了,但是测试点7有问题了 qwq
我命由我不由天
(ゴテンクス)
21
@黄飞栋 o知道了,因为有些人不@不来,所以我习惯@