我觉得(不一定对),你在进入while之前vis[start.x][start.y]=1;后面又if(vis[x][y])好像一定退出循环了……
by wang_ly_ly @ 2024-02-08 20:58:23
@[wang_ly_ly](/user/748723) 改了,但还是错的。关注了
```
#include<bits/stdc++.h>
using namespace std;
const int maxn=305;
int n,m,ans=INT_MAX;
bool vis[maxn][maxn];
char aaa[maxn][maxn];
int dx[]={0,1,-1,0,0},dy[]={0,0,0,1,-1};
struct cs
{
int xx1,yy1,xx2,yy2;
}c[130];
struct node
{
int x,y,t;
}start ,endnode;
queue<node>qu;
void bfs()
{
qu.push(start);
vis[start.x][start.y]=1;
while(!qu.empty())
{
int x=qu.front().x,y=qu.front().y,t=qu.front().t;
qu.pop();
if(endnode.x==x&&endnode.y==y)
{
ans=min(ans,t);
}
if(aaa[x][y]>='A'&&aaa[x][y]<='Z')
{
if(x==c[aaa[x][y]].xx1&&y==c[aaa[x][y]].yy1)
{
int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1;
if(!vis[xx1][yy1])
{
qu.push(node{xx1,yy1,t});
vis[xx1][yy1]=1;
continue;
}
}
else
{
int xx2=c[aaa[x][y]].xx2,yy2=c[aaa[x][y]].yy2;
if(!vis[xx2][yy2])
{
qu.push(node{xx2,yy2,t});
vis[xx2][yy2]=1;
continue;
}
}
}
for(int i=1;i<=4;i++)
{
int nx=dx[i]+x,ny=dy[i]+y;
if(vis[nx][ny]||nx<1||ny<1||nx>n||ny>n)
{
continue;
}
vis[nx][ny]=1;
qu.push(node{nx,ny,t+1});
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char q;
cin>>q;
aaa[i][j]=q;
if(q=='#')
{
vis[i][j]=1;
}
if(q>='A'&&q<='Z')
{
if(!c[q].xx1)
{
c[q].xx1=i,c[q].yy1=j;
}
else
{
c[q].xx2=i,c[q].yy2=j;
}
}
if(q=='@')
{
start.x=i;
start.y=j;
start.t=0;
}
if(q=='=')
{
endnode.x=i;
endnode.y=j;
}
}
}
bfs();
cout<<ans;
return 0;
}
by dongrunxuan @ 2024-02-09 08:48:51
@[dongrunxuan](/user/959582) 你有没有RE?
by wang_ly_ly @ 2024-02-09 12:41:06
如果有的话(我觉得没影响)
vis[nx][ny]||nx<1||ny<1||nx>n||ny>n,先判有没有超过
by wang_ly_ly @ 2024-02-09 12:43:21
~~~
if(endnode.x==x&&endnode.y==y)
{
ans=min(ans,t);
}
~~~
我觉得你到终点了就return了吧
by wang_ly_ly @ 2024-02-09 12:45:35
啊,不不不,是continue
by wang_ly_ly @ 2024-02-09 13:22:08
~~~
if(x==c[aaa[x][y]].xx1&&y==c[aaa[x][y]].yy1)
{
int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1;
~~~
你这个当前是1,不应该变成2吗?
我不太理解
by wang_ly_ly @ 2024-02-09 14:04:59
@[wang_ly_ly](/user/748723) 没有RE,其余的问题都改了,[戳这里](https://www.luogu.com.cn/record/146765719)
by dongrunxuan @ 2024-02-13 10:54:46
@[dongrunxuan](/user/959582) 我看不到代码啊
by wang_ly_ly @ 2024-02-13 12:53:47
@[wang_ly_ly](/user/748723)
```
#include<bits/stdc++.h>
using namespace std;
const int maxn=305;
int n,m,ans=INT_MAX;
bool vis[maxn][maxn];
char aaa[maxn][maxn];
int dx[]={0,1,-1,0,0},dy[]={0,0,0,1,-1};
struct cs
{
int xx1,yy1,xx2,yy2;
}c[130];
struct node
{
int x,y,t;
}start ,endnode;
queue<node>qu;
void bfs()
{
qu.push(start);
vis[start.x][start.y]=1;
while(!qu.empty())
{
int x=qu.front().x,y=qu.front().y,t=qu.front().t;
qu.pop();
if(endnode.x==x&&endnode.y==y)
{
ans=min(ans,t);
continue;
}
if(aaa[x][y]>='A'&&aaa[x][y]<='Z')
{
if(x==c[aaa[x][y]].xx2&&y==c[aaa[x][y]].yy2)
{
int xx1=c[aaa[x][y]].xx1,yy1=c[aaa[x][y]].yy1;
if(!vis[xx1][yy1])
{
qu.push(node{xx1,yy1,t});
vis[xx1][yy1]=1;
continue;
}
}
else
{
int xx2=c[aaa[x][y]].xx2,yy2=c[aaa[x][y]].yy2;
if(!vis[xx2][yy2])
{
qu.push(node{xx2,yy2,t});
vis[xx2][yy2]=1;
continue;
}
}
}
for(int i=1;i<=4;i++)
{
int nx=dx[i]+x,ny=dy[i]+y;
if(vis[nx][ny]||nx<1||ny<1||nx>n||ny>n)
{
continue;
}
vis[nx][ny]=1;
qu.push(node{nx,ny,t+1});
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char q;
cin>>q;
aaa[i][j]=q;
if(q=='#')
{
vis[i][j]=1;
}
if(q>='A'&&q<='Z')
{
if(!c[q].xx1)
{
c[q].xx1=i,c[q].yy1=j;
}
else
{
c[q].xx2=i,c[q].yy2=j;
}
}
if(q=='@')
{
start.x=i;
start.y=j;
start.t=0;
}
if(q=='=')
{
endnode.x=i;
endnode.y=j;
}
}
}
bfs();
cout<<ans;
return 0;
}
by dongrunxuan @ 2024-02-13 15:02:20