开始的时候犯了一个错误:重复搜索,所以一直超时(32行中漏写了d[nx][ny]==0)
之后又发现50行错写成了:maze[x][y]=t;
改正之后就AC了,卡了我很久,我太难了!!!
1 #include<cstring>
2 #include<iostream>
3 #include<queue>
4 #include<algorithm>
5 #include<cstdio>
6
7 using namespace std;
8
9 typedef pair<int,int> P;
10 const int INF=100000000;
11 int m;
12 int maze[800][800];
13 int x,y;
14 int t;
15 int d[800][800];
16 int dx[4]={1,-1,0,0};
17 int dy[4]={0,0,-1,1};
18
19 void bfs(){
20 queue<P> que;
21 que.push(P(0,0));
22 while(que.size()){
23 x=que.front().first;
24 y=que.front().second;
25 que.pop();
26 if(maze[x][y]==INF){
27 printf("%d\n",d[x][y]); return;
28 }
29 for(int i=0;i<4;i++){
30 int nx=x+dx[i],ny=y+dy[i];
31 if(nx==0&&ny==0) continue;
32 if(0<=nx&&ny>=0&&d[nx][ny]==0&&(d[x][y]+1<maze[nx][ny])){
33 d[nx][ny]=d[x][y]+1;
34 que.push(P(nx,ny));
35 }
36 }
37 }
38 printf("-1\n");
39 }
40
41 void solve(){
42 for(int i=0;i<800;i++){
43 for(int j=0;j<800;j++)
44 maze[i][j]=INF;
45 }
46 scanf("%d",&m);
47 for(int i=1;i<=m;i++){
48 scanf("%d%d%d",&x,&y,&t);
49
50 maze[x][y]=min(maze[x][y],t);
51 for(int j=0;j<4;j++){
52 int nx=x+dx[j],ny=y+dy[j];
53 if(0<=nx&&ny>=0){
54 maze[nx][ny]=min(maze[nx][ny],t);
55 }
56 }
57 }
58 bfs();
59 }
60
61 int main(){
62 solve();
63 return 0;
64 }