标签:des blog ar io os sp for on div
Description
Input
Output
Sample Input
Sample Output
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<vector> #include<set> using namespace std; #define INF 1<<30 int t,n,m,a[10][10],sx,sy; int step[10][10],T[10][10],minn; int dic[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; bool check(int x,int y) { if(x<0||x>=n||y<0||y>=m||a[x][y]==0) return false; return true; } void dfs(int x,int y) { if(T[x][y]<=0) return ; if(a[x][y]==3) { if(minn>step[x][y]) minn=step[x][y]; return ; } for(int i=0;i<4;i++) { int xx,yy; xx=x+dic[i][0],yy=y+dic[i][1]; if(check(xx,yy)) { if((step[xx][yy]<=step[x][y]+1)&&(T[xx][yy]>=T[x][y]-1)) continue; step[xx][yy]=step[x][y]+1,T[xx][yy]=T[x][y]-1; if(a[xx][yy]==4&&T[xx][yy]>0) { T[xx][yy]=6; } dfs(xx,yy); } } } int main() { scanf("%d",&t); while(t--) { minn=INF; memset(T,0,sizeof(T)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { scanf("%d",&a[i][j]); if(a[i][j]==2) sx=i,sy=j; } for(int i=0;i<n;i++) for(int j=0;j<m;j++) step[i][j]=INF; step[sx][sy]=0; T[sx][sy]=6; dfs(sx,sy); if(minn!=INF) printf("%d\n",minn); else printf("-1\n"); } return 0; }
标签:des blog ar io os sp for on div
原文地址:http://www.cnblogs.com/a972290869/p/4166227.html