顺便带杯奶茶 求求帮一帮 WA 90 ) :

#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step;
};
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
queue q;
queue qq;
int n,sum=99999999,s=99999999,x=0,y=0,xx=0,yy=0,xxx=0,yyy=0,ans=0,m,vis[105][105];
char a[105][105];
void dfs(){
q.push( node{x,y,0}); //起点入队
vis[y]=1; //标记起点
while(q.size()!=0){ //循环队列
for(int i=0;i<4;i++){ //枚举方向
int tx=q.front().x+dx[i]; //领地计数
int ty=q.front().y+dy[i];
if(tx>=0&&tx<=n&&ty>=0&&ty<=m&&vis[tx][ty]==0&&a[tx][ty]!=‘#’){
q.push( node{tx,ty,q.front().step+1} ); //入队
vis[tx][ty]=1;
if(tx==xx&&ty==yy){
ans=ans+q.front().step+1;
return ;
}
}
}
q.pop();
}
cout<<“no way”;
exit(0);
}
void bfs(){
qq.push( node{xx,yy,0}); //起点入队
vis[xx][yy]=1; //标记起点
while(qq.size()!=0){ //循环队列
for(int i=0;i<4;i++){ //枚举方向
int tx=qq.front().x+dx[i]; //领地计数
int ty=qq.front().y+dy[i];
if(tx>=0&&tx<=n&&ty>=0&&ty<=m&&vis[tx][ty]==0&&a[tx][ty]!=‘#’){
qq.push( node{tx,ty,qq.front().step+1} ); //入队
vis[tx][ty]=1;
if(a[tx][ty]==‘H’){
ans=ans+qq.front().step+1;
return ;
}
}
}
qq.pop();
}
cout<<“no way”;
exit(0);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==‘Y’){
x=i;
y=j;
}
if(a[i][j]==‘Q’){
xx=i;
yy=j;
}
}
}
dfs();
memset(vis,0,sizeof(vis));
bfs();
cout<<ans;
}
:pray: :pray: :pray:

4 个赞

可以发格式化的代码吗

5 个赞

不用发了

5 个赞

问题:dfs和bfs判断边界是>=1不是>=0

5 个赞

我改了,就AC了

3 个赞

害海氦

2 个赞

老帖开封印了哈

2 个赞