社区讨论
BFS 92PTS求调%%%
P2895[USACO08FEB] Meteor Shower S参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9j3bx
- 此快照首次捕获于
- 2025/11/03 22:56 4 个月前
- 此快照最后确认于
- 2025/11/03 22:56 4 个月前
如图,写的是bfs,求大佬看一下错在哪里QAQ
CPP#include<bits/stdc++.h>
using namespace std;
const int N=305;
int a[N][N];
int st[N][N];
int flag[N][N];
int ans=INT_MAX;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void bfs()
{
typedef pair<int,int> PII;
queue<PII>q;
q.push({0,0});
flag[0][0]=1;
a[0][0]=0;
while(q.size())
{
int kx=q.front().first;
int ky=q.front().second;
q.pop();
for(int i=0;i<=3;i++)
{
int tx=kx+dx[i];
int ty=ky+dy[i];
a[tx][ty]=a[kx][ky]+1;
if(!flag[tx][ty]&&a[tx][ty]<st[tx][ty]&&tx>=0&&ty>=0)
{
q.push({tx,ty});
flag[tx][ty]=1;
if(st[tx][ty]==INT_MAX)
{
ans=min(ans,a[tx][ty]);
}
}
}
}
}
int main()
{
int m;
cin>>m;
for(int i=0;i<=300;i++)
{
for(int j=0;j<=300;j++)
{
st[i][j]=INT_MAX;
}
}
int xi,yi,ti;
for(int i=1;i<=m;i++)
{
cin>>xi>>yi>>ti;
st[xi][yi]=min(st[xi][yi],ti);
st[xi-1][yi]=min(st[xi-1][yi],ti);
st[xi+1][yi]=min(st[xi+1][yi],ti);
st[xi][yi+1]=min(st[xi][yi+1],ti);
st[xi][yi-1]=min(st[xi][yi-1],ti);
}
bfs();
if(ans==INT_MAX)
cout<<"-1";
else
cout<<ans;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...