struct Point{
int x,y;
};
Point temp = (Point){1, 1};
实际上 Point temp = {1, 1};
也是可以的。但我更建议 (Point){1, 1};
的形式,因为我们经常需要构造一个临时的结构体压入一个 queue<Point>
之类数据结构。q.push({1, 2})
的方式只有 c++11
标准及以上才是允许的。q.push((Point){1, 2})
的方式就没有这个顾虑。
例子:
pair<int, int> a;
a = make_pair(2, 3);
cout << a.first << "," << a.second << "\n";
上下左右四个方向的例子:
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
以 (x,y)
为基准的第 i
个方向的位置为 (x + dx[i], y + dy[i])
。这种方式可以很方便地用一个循环枚举每个方向的下一个位置。
起点入队
while(队列非空&&没找到终点)
{
取出队头 h
枚举所有 h 能走到的点
如果可以找到并且没走过
标记走过了/步数
放入队列
}
初始化
清空队列
标记每个状态都还没有搜索过
标记每个状态的答案
起点入队
while (队列非空 && 仍没搜到终点)
取出队头状态 now
考虑从 now 下一步能搜到哪些状态,对于每一个状态 nxt
if (nxt 合法 && nxt 没搜过)
nxt 入队
记录 nxt 的答案
标记 nxt 被搜索过了