#include<iostream> #include<queue> using namespace std; int i,j,n,m,flag,tuse,tremain; int mark[10][10]; int map[10][10]; struct node { int x,y,usetime,remaintime; }start,n1,n2; void setmap() { for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>map[i][j]; if(map[i][j]==2) { start.x=i; start.y=j; start.usetime=0; start.remaintime=6; } } } } void bfs() { const int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; memset(mark,0,sizeof(mark)); mark[start.x][start.y]=6; tuse=0; tremain=0; queue<node>q; while(!q.empty()) q.pop(); q.push(start); while(!q.empty()&&flag) { n2 = q.front(); q.pop(); for(i=0;i<4;i++) { n1.x=n2.x+dir[i][0]; n1.y=n2.y+dir[i][1]; if(n1.x>=0&&n1.y>=0&&n1.x<=n-1&&n1.y<=m-1&&map[n1.x][n1.y]!=0) { n1.usetime=n2.usetime+1; n1.remaintime=n2.remaintime-1; if(map[n1.x][n1.y]==4) { n1.remaintime=6; } if(map[n1.x][n1.y]==3) { tuse=n2.usetime+1; tremain=n2.remaintime-1; flag=0; break; } if(n1.remaintime>1&&mark[n1.x][n1.y]<n1.remaintime) { mark[n1.x][n1.y]=n1.remaintime; q.push(n1); } } } if(!flag) { break; } } } int main() { int t; cin>>t; while(t--) { cin>>n>>m; setmap(); flag=1; bfs(); if(!flag) { if(tremain>0) { cout<<tuse<<endl; } else { cout<<-1<<endl; } } else { cout<<-1<<endl; } } return 0; }
HDU Nightmare
最新推荐文章于 2021-12-09 11:05:40 发布