今天白天放假故没有考试
虫食算(p1092)
一开始稍微想了一下就码了几段代码,发现思路根本就是乱的而且很多细节几乎晕掉。所以开始在草稿纸上理思路,暂未码完代码,但整体dfs思路如下,不知道对不对…
例:
BADC
CBDA
DCCC
(首先边输入边处理, 将算式按照从上到下、从低位到高位一位位存进一个 s 结构体:C -> A -> C -> D -> D -> C…于是 s 中就按顺序存好了dfs要搜索的字母位置,并且根据 s[i] 的 i % 3 的余数可知这个位置的字母是第几行的)【有点绕…
1.当搜索对象为第一行和第二行时
如果当前位置上的字母已匹配上数字,直接dfs(now+1)
如果当前位置上的字母未匹配上数字{
在0~9中找一个未被匹配的数字,将当前字母和这个数字匹配上,再dfs(now+1)
}
【然后要记得dfs后的取消匹配】
2.当搜索对象为第三行时
- tmp1=前两行这个位上的字母和(注意是n进制下的和)【写的不清楚…自行体会手动加法吧】; tmp2=用来存进位。
- 如果当前字母已匹配上数字{
(1)如果当前字母匹配上的数字==(tmp1+tmp2)%n,那么更新tmp2为(tmp1+tmp2)/n,dfs(now+1);
(2)如果当前字母匹配的数字!=(tmp1+tmp2)%n,那么return;
} - 如果当前字母未匹配过数字{
(1)检验(tmp1+tmp2)%n是否匹配了别的字母。如果是,则return;如果不是,则进行下一步;
(2)将该字母与数字(tmp1+tmp2)%n匹配上,然后同样处理给下一次进位的tmp2,再dfs(now+1);
}
【如果是最高位还要注意tmp2只能为0】
【同样记得dfs后的取消匹配】
3.之后的思路还有整个代码实现的细节我还没有想清楚,先不码了,全部理清楚再开始…
欢迎指出错误!!!拯救一个(说不定)在迷途的孩子!!!/滑稽