注意傳送的時候一定要傳送過去。如果另外一邊還是傳送門的話 也是死路。
注意判斷終點的時候 還要層數一樣
#include#include #include #include #include using namespace std; char map[2][12][12]; bool vis[2][12][12]; int dx[] = {0,0,-1,1}; int dy[] = {-1,1,0,0}; int lim; int n,m; int stx,sty,stc,tgx,tgy,tgc; bool ok(int x,int y) { if(x =0 && y =0)return true; return false; } bool dfs(int posx,int posy,int posc,int dep) { if(posx==tgx && posy==tgy && posc==tgc && dep<=lim)return true; else if(dep>lim)return false; for(int d=0;d<4;d++) { int x=posx+dx[d]; int y=posy+dy[d]; if(ok(x,y) && map[posc][x][y]=='#' && map[1-posc][x][y]!='*' && !vis[1-posc][x][y] && map[1-posc][x][y]!='#') { vis[1-posc][x][y]=true; if(dfs(x,y,1-posc,dep+1))return true; vis[1-posc][x][y]=false; } else if(ok(x,y) && map[posc][x][y]!='#' && map[posc][x][y]!='*' && !vis[posc][x][y]) { vis[posc][x][y]=true; if(dfs(x,y,posc,dep+1))return true; vis[posc][x][y]=false; } } return false; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&lim); for(int i=0;i