在dfs值返回时两个NO的返回值不同写错了一个-100,一个-10,肯定不对了!!嘿嘿····,找到了,改了,提交了!对了!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include#include #include using namespace std; struct node { int x,y,k; int time; friend bool operator<(node a,node b) { return a.time>b.time; } }; int visit[20][20][2]; int n,m,endx,endy,endk,ti,startx,starty,startk; char a[20][20],b[20][20]; int dir[4][2]={0,1,1,0,-1,0,0,-1}; int judge(int x,int y,int k) { if(x>=0&&x =0&&y q; node cur,next; int i,x,y,k; cur.x=startx;cur.y=starty; cur.k=startk;cur.time=0; visit[startx][starty][startk]=1; q.push(cur); while(!q.empty()) { next=q.top(); q.pop(); if(next.x==endx&&next.y==endy&&next.k==endk) return next.time; if(next.time>=ti) return -100; for(i=0;i<4;i++) { x=next.x+dir[i][0]; y=next.y+dir[i][1]; k=next.k; if(judge(x,y,k)&&visit[x][y][k]==0) { if(k==0&&a[x][y]=='#') { cur.time=next.time+1; cur.k=1; cur.x=x;cur.y=y; q.push(cur); visit[x][y][1]=1; continue; } if(k==1&&b[x][y]=='#') { cur.time=next.time+1; cur.k=0; cur.x=x;cur.y=y; q.push(cur); visit[x][y][0]=1; continue; } cur.time=next.time+1; cur.k=next.k; cur.x=x;cur.y=y; visit[x][y][k]=1; q.push(cur); } } } return -100; } int main() { int T,i,j; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&ti); memset(visit,0,sizeof(visit)); for(i=0;i }