开始的时候犯了一个错误:重复搜索,所以一直超时(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 }