LumenOvO @ 2021-08-21 02:22:29
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define endl '\n'
const double PI = acos(-1.0);
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int modn = 1e9;
const int N = 1e4+6;
int m[305][305],vis[305][305];
struct node{
int x,y,t;
}s;
int fx[4]={0,0,1,-1};
int fy[4]={1,-1,0,0};
void solve(){
int n;
cin>>n;
int x,y,t;
//memset(m,-1,sizeof m);
for(int i=0; i<=302; i++)
for(int j=0; j<=302; j++)
m[i][j]=-1;
//memset(vis,0,sizeof vis);
for(int i=1;i<=n;i++) {
cin >> x >> y >> t;
if (m[x][y] == -1 || t < m[x][y])
m[x][y] = t;
for (int j = 0; j < 4; j++) {
int nx = x + fx[j];
int ny = y + fy[j];
if ((t<m[nx][ny]||m[nx][ny]==-1)&&nx>=0&&ny>=0) {
m[nx][ny] = t;
}
}
}
queue<node>q;
s.x=0,s.y=0,s.t=0;
vis[0][0]=1;
q.push(s);
while(!q.empty()){
node fir = q.front();
q.pop();
for(int i=0;i<4;i++){
int nx = fir.x+fx[i];
int ny = fir.y+fy[i];
//int nt = fir.t+1;
if(nx>=0&&ny>=0&&vis[nx][ny]==0&&(fir.t+1<m[nx][ny])||m[nx][ny]==-1){
vis[nx][ny]=1;
node now;
now.x=nx,now.y=ny,now.t=fir.t+1;
q.push(now);
if(m[nx][ny]==-1){
cout<<now.t<<endl;
return;
}
}
}
}
cout<<-1<<endl;
}
signed main(){
//ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t=1;
//cin>>t;
//getchar();
while(t--){
solve();
}
return 0;
}
以上是ac代码是没有问题的,但是将一开始的初始化中的i和j改成305之后全wa了,这是为什么,请dalao解答一下0.0,被折磨一个一个多小时了,万万没想到这里有问题。。
by 违规用户名76G!ihcm @ 2021-08-21 03:00:27
@LumenOvO 305就越界到别的数组了,你定的数组下标0到304
by 信守天下 @ 2021-08-21 07:52:01
@LumenOvO 你开305的数组,下标就是0~304,没有第305号位
by flowerletter @ 2021-08-21 08:07:06
@违规用户名76G!ihcm 太强了%%%
by 违规用户名76G!ihcm @ 2021-08-21 09:29:42
@ღmjytxdyღ orz
by LumenOvO @ 2021-08-21 11:13:59
@违规用户名76G!ihcm 我尝试了一下把302换成304.。还是连样例都不对,而且我直接用memset的话,也是样例都过不去。。
by LumenOvO @ 2021-08-21 11:14:29
@信守天下 我尝试了一下把302换成304.。还是连样例都不对,而且我直接用memset的话,也是样例都过不去。。
by LumenOvO @ 2021-08-21 12:31:01
破案了。。。 在bfs中的if语句里,我的小括号没有括全。。导致了一系列问题。。是我自己眼睛出问题了,这都开不出来