一、写在前面
紫书上的代码没有给全,缺省了输入函数和一些定义,自己补全了一下,同时加了一些注释。反复修改,交上去终于对了。
Tip1:输出格式很坑
Tip2:读入很麻烦,所以最好写完读入函数之后,试验一下,再写后面的。免得最后如果出错了很难找错。自己写完读入函数之后,试验过程中就改出了不少错误。
二、代码及注释
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
//预先定义的部分
const char* dirs="NESW"; //顺时针
const char* turns="FLR";
int dir_id(char c){
return strchr(dirs,c)-dirs; //strchr这里返回以c开头的dirs里的指针,对应输出的是以c开头的dirs字符串部分
}
int turn_id(char c){
return strchr(turns,c)-turns;
}
const int dr[4]={
-1,0,1,0}; //NESW
const int dc[4]={
0,1,0,-1};
struct node{
int r;
int c;
int dir;
node():r(0),c(0),dir(0){
} //注意这里要写两个构造函数,一个有参构造,一个无参构造,否则下面的pre数组将无法定义
node(int u,int v,int d):r(u),c(v),dir(d){
}
};
node walk(const node& u,int turn){
int dir=u.</