#sf16. 棋盘(Chessboard)

    ID: 6152 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>深度优先搜索记忆化搜索剪枝GESP 7级

棋盘(Chessboard)

棋盘

题目描述

有一个 m×m 的棋盘,棋盘上每个格子可能是红色(用 0 表示)、黄色(用 1 表示)或无色。你可以从上、下、左、右四个方向前进,需要从棋盘左上角 (1,1) 走到右下角 (m,m)。

行走规则:

  • 任何时刻你只能站在有颜色的格子上;
  • 当你走到的格子与当前所在格子颜色相同时,无需花费金币;
  • 颜色不同时,需要花费 1 个金币;
  • 当下一个格子无色时,你可以施展魔法,把它暂时变成与当前格子相同的颜色再走上去,这需要花费 2 个金币;
  • 魔法不能连续使用(即上一步刚施过法,这一步不能再施法);当你离开一个被你施过法上色的格子之后,它会恢复为无色。

求从左上角走到右下角的最小金币花费;若无法到达,输出 -1。

输入格式

第一行两个整数 m 和 n,分别表示棋盘边长和有颜色的格子数量。

接下来 n 行,每行三个整数 x、y、c,表示坐标为 (x,y) 的格子有颜色,c 为 0(红色)或 1(黄色)。其余没有给出的格子均为无色。

输出格式

一个整数,表示最小金币花费;无解输出 -1。

样例输入

5 7
1 1 0
1 2 0
2 2 1
3 3 1
3 4 0
4 4 1
5 5 0

样例输出

8

数据范围

  • 1 ≤ m ≤ 100
  • 1 ≤ n ≤ 1000
  • 0 ≤ c ≤ 1
  • 1 ≤ x, y ≤ m
  • 起点 (1,1) 保证有颜色

本题为 NOIP 2017 普及组第 3 题(洛谷 P3956),题面规则与原题一致。