东西南北 对应行进加减1容易反
const char* DIR="EWSN",TURN="FLR";
const int dx\[\]={1,-1,0,0},dy\[\]={0,0,-1,1};
当路线会回到出发点的时候,有很多 corner cases 起先没想到
void solve(){
queue<node> q;
memset(d,-1,sizeof(d));
node n1(r1,c1,dir);
q.push(n1);
d[r1][c1][dir]=0;
while (!q.empty()){
node u=q.front();
q.pop();
if (u.r==r2 && u.c==c2){
print_ans(u);
return;
}
_for(i,0,2){
node v=walk(u,i);
if (has_edge[u.r][u.c][u.dir][i] && in(v.r,v.c) && d[v.r][v.c][v.dir]<0){
d[v.r][v.c][v.dir]=d[u.r][u.c][u.dir]+1;
p[v.r][v.c][v.dir]=u;
q.push(v);
}
}
}
cout<<maze_name<<'\n';
cout<<" No Solution Possible"<<'\n';
}
也就是说dr0c0?在开始并不统计
vector打印代替DFS避免栈溢出