1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n,m; char mat[1005][1005]; int book[1005][1005]; int sx,sy,fx,fy; int nxt[4][2]={0,1,0,-1,1,0,-1,0}; struct node{ int x,y,idx; friend bool operator < (node a,node b){ return a.idx>b.idx; } }; priority_queue<node>q; int main(){ freopen("maze.in","r",stdin); freopen("maze.out","w",stdout); cin>>n>>m; memset(book,0x3f,sizeof book); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mat[i][j]; if(mat[i][j]=='A'){//初始化起点 sx=i; sy=j; } if(mat[i][j]=='B'){//初始化终点 fx=i; fy=j; } } } q.push({sx,sy,0});//起点入队 book[sx][sy]=0;//初始化起点的各个数值 while(!q.empty()){//BFS开始 node tmp=q.top(); q.pop();//出队 if(tmp.x==fx&&tmp.y==fy){//到终点了 cout<<tmp.idx<<endl; return 0; } for(int i=0;i<4;i++){ int nx=tmp.x+nxt[i][0];//下一步的x坐标 int ny=tmp.y+nxt[i][1];//下一步的y坐标 int idx=tmp.idx;//下一步的对小时间(初始化) if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&book[nx][ny]==0x3f3f3f3f){//没越界,没走过 if(mat[nx][ny]=='X'){//毒蘑菇 nx=tmp.x; ny=tmp.y; continue; } else if(mat[nx][ny]=='D'){//大龙 idx+=3; } else if(mat[nx][ny]=='S'){//小龙 idx+=2; } else{ idx+=1;//普通路 } q.push({nx,ny,idx});//下一可行步入队 book[nx][ny]=min(book[nx][ny],idx);//更新最小值 } } } cout<<-1<<endl;//无解输出-1 fclose(stdin); fclose(stdout); return 0; }
- 1
信息
- ID
- 1339
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 89
- 已通过
- 5
- 上传者