#include #include #include #include #include #include #include using namespace std; char gp[16][16]; int nd[16][2],dp[1<<16][16],n,m,fis,ac,cnt=0,dis[16][16]; int dr[4][2]={1,0,-1,0,0,1,0,-1}; int bfs(int x,int y,int xx,int yy) { queue a,b; int vd[16][16]; memset(vd,-1,sizeof(vd)); if(xx==x&&y==yy) return 0; a.push(x); b.push(y); vd[x][y]=0; while(a.empty()==0) { int nx=a.front(),ny=b.front(); a.pop();b.pop(); for(int i=0;i<4;i++) { int dx=nx+dr[i][0],dy=ny+dr[i][1]; if(dx<0||dx>=n||dy<0||dy>=m||vd[dx][dy]!=-1||gp[dx][dy]=='D')continue; vd[dx][dy]=vd[nx][ny]+1; a.push(dx);b.push(dy); if(dx==xx&&dy==yy)return vd[dx][dy]; } } return -1; } bool check(int gs) { memset(dp,-1,sizeof(dp)); dp[1<