由于本人是一个蒟蒻,还没学会双端队列。凭着刚学的队列仔细仔细的思考 终于 老天看我可怜 天降思维于笨脑中
咱们可以先创建一个二维数组minpirce用来存最小价值(先将minprice全部定义为-1,表示没用过) 然后从起点开始先将起点的minprice设置成0然后进行bfs。 那么现在就有两种情况。
①.新点(a,b)跟老点是同一个字符,那么我们可以if minprice[a][b]是不是-1,如果是就直接等于minpirce老点 如果不是-1 确保以前的minprice[a][b]大于minprice老点 那么就可以将minprice[a][b]更新成minpirce老点(注意一定要是大于minprice老点,如果等于的话会无限bfs)
②.新点和老点不是同一个字符,那么还是跟上面的情况类似 如果minprice[a][b]是-1 直接无脑更新minprice老点+1 否则还是比较大小再选择更新与否,这样就保证了当前点一定有花费最小的解 也就是最后更新的minprice
下面是上述思路的代码(非题解)
if(broad[a][b] == broad[t.first][t.second] &&( minprice[a][b] > minprice[t.first][t.second] || minprice[a][b] == -1))
{
minprice[a][b] = minprice[t.first][t.second];
q.push({a,b});
}
if(broad[a][b] != broad[t.first][t.second] &&( minprice[a][b] > minprice[t.first][t.second] + 1 || minprice[a][b] == -1) )
{
minprice[a][b] = minprice[t.first][t.second] + 1;
q.push({a,b});
}
不是题解!!!管理员不要给我禁言!!!我没有发题解 只是一种不同于双端队列的解题思路!!!