分析: 给一个地图,一个人从起点开始,身上有一个定时炸弹,时间为6,每走一步花费一个时间,走到标号为4 的点上时时间重置,
问从起点到终点最少需要经过多少步。
分析: 直接广搜,加上对状态的判重。。。
View Code
#include#include struct node{ int x,y,time,step;}q[1000],st,en,tt,xx;int f[8]={-1,0,0,1,0,-1,1,0};int a[10][10];int b[10][10];int v[10][10][7];int main(){ int front,rear,t,n,m,i,j,res; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { scanf("%d",&a[i][j]); if(a[i][j]==2){ st.x=i; st.y=j; } else if(a[i][j]==3){ en.x=i; en.y=j; } } memset(v,0,sizeof(v)); front=rear=0; q[rear].x=st.x; q[rear].y=st.y; q[rear].time=6; q[rear++].step=0; v[st.x][st.y][6]=1; res=9999; while(front =1&&tt.x<=n&&tt.y>=1&&tt.y<=m&&a[tt.x][tt.y]&&tt.time>0&&!v[tt.x][tt.y][tt.time]) { v[tt.x][tt.y][tt.time]=1; tt.step=xx.step+1; if(a[tt.x][tt.y]==4) tt.time=6; if(a[tt.x][tt.y]==3&&tt.step