#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;
}
![]()
4 个赞
可以发格式化的代码吗
5 个赞
不用发了
5 个赞
问题:dfs和bfs判断边界是>=1不是>=0
5 个赞
我改了,就AC了
3 个赞
害海氦
2 个赞
老帖开封印了哈
2 个赞