标签:
3 3 3 2 1 1 1 1 0 1 1 3 4 8 2 1 1 0 1 1 1 0 1 0 4 1 1 0 4 1 1 0 0 0 0 0 0 1 1 1 1 4 1 1 1 3 5 8 1 2 1 1 1 1 1 4 1 0 0 0 1 0 0 1 1 4 1 0 1 1 0 1 1 0 0 0 0 3 0 1 1 1 4 1 1 1 1 1
4 -1 13
#include <iostream> #include<cstdio> #include<algorithm> #include<climits> #include<deque> #include<cstring> using namespace std; int dr[4][2]={{1,0},{0,1},{-1,0},{0,-1} }; int n,m,i,j,sx,sy,flag,ans,t,tx,ty; int mp[10][10],vis[10][10],time[10][10],ti[10][10]; struct node { int x,y; }; deque<node> s; int check(int x,int y) { if (x>0 && x<=n && y>0 && y<=m && mp[x][y]!=0) return 1; else return 0; } void bfs() { node p; s.clear(); p.x=sx; p.y=sy; vis[sx][sy]=1; s.push_back(p); while(!s.empty()) { node q=s.front(); for(int i=0;i<4;i++) { int xx=q.x+dr[i][0]; int yy=q.y+dr[i][1]; if(check(xx,yy)) { if(vis[xx][yy]) { if (ti[xx][yy]<ti[q.x][q.y]-1) { ti[xx][yy]=ti[q.x][q.y]-1; time[xx][yy]=time[q.x][q.y]+1; p.x=xx; p.y=yy; s.push_back(p); } } else { if(ti[q.x][q.y]-1>0) { p.x=xx; p.y=yy; s.push_back(p); vis[xx][yy]=1; time[xx][yy]=time[q.x][q.y]+1; ti[xx][yy]=ti[q.x][q.y]-1; if(mp[xx][yy]==4) { ti[xx][yy]=6; mp[xx][yy]=0; } if (mp[xx][yy]==3) return; } } } } s.pop_front(); } return; } int main() { scanf("%d",&t); for(;t>0;t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { scanf("%d",&mp[i][j]); if (mp[i][j]==2) sx=i,sy=j; if (mp[i][j]==3) tx=i,ty=j; } ans=INT_MAX; flag=0; memset(vis,0,sizeof(vis)); memset(ti,0,sizeof(ti)); memset(time,-1,sizeof(time)); ti[sx][sy]=6; time[sx][sy]=0; bfs(); /*if(flag) printf("%d\n",ans); else printf("-1\n");*/ printf("%d\n",time[tx][ty]); /* printf("------------------\n"); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) printf("%d ",ti[i][j]); printf("\n"); }*/ } return 0; }
标签:
原文地址:http://www.cnblogs.com/stepping/p/5644853.html