[ABC361D]Go Stone Puzzle

题目大意

给定一个字符串S,它是由B和W组成,之后在S后面添加两个空格,可以将相邻的两个字符和空格进行交换,交换的前提是只能相邻,同时两个字符必须都是B或者W,再给一个字符串T,也是由B和W组成,问最小经过几次交换,使得S变成T

\(1 \leq |S| \leq 14\)

题解:

看到数据范围,一看就知道是个搜索,怎么搜索?
\(dfs(int k,int p,int sum)\)表示就是搜索到第k个位置,空格在第p个位置,交换次数为sum
对于每个位置,我们可以进行交换,也可以不进行交换,这样搜索有一个问题,我这里是顺序搜索,字符和空格进行交换,但是空格也可以和字符交换,顺序搜索已经到空格了,我们无法知道他的交换范围,如果我们进行了交换,他交换了回去我们就无法搜索了,因为是顺序搜索,所以这个搜索是错的

经过学生提醒,这个是bfs,我突然想到该怎么做了,我把每一种交换状态记录下来,同时使用map记录一下每一个状态有没有被记录过,这个题就很容易做了

这个题最重要的启示就是看到数据范围小的话,只想到dfs,看到最小步骤的话,还可以想到bfs

posted @ 2024-07-10 17:06  xinyimama  阅读(19)  评论(0编辑  收藏  举报