解题思路:
1.先判断原串中是否能构成密码;
2.再判断密码是否直接在原串中;
3.BFS搜索,复合数组分别记录字符串和其对应的交换次数,每次交换都要先判断该串曾经是否出现过,未出现则继续判断密码是否存在,若存在密码,输出;不存在密码,记录当前串然后继续搜即可
注意事项:
参考代码:
n, password = int(input()), '2012' nums = input() combinations, temp_nums = [[nums, 0]], [] if nums.count('2') < 2 or nums.count('0') < 1 or nums.count('1') < 1: print(-1) else: if password in nums: print(0) else: # BFS while combinations: out_ = combinations.pop(0) temp_nums.append(out_[0]) for i in range(n - 1): temp = out_[0][:i] + out_[0][i + 1] + out_[0][i] + out_[0][i + 2:] if password in temp: print(out_[1] + 1) exit() if temp not in temp_nums: combinations.append([temp, out_[1] + 1])
0.0分
1 人评分
printf基础练习2 (C语言代码)浏览:826 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:701 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:897 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
1048题解(读入回车问题)浏览:628 |
简单的a+b (C语言代码)浏览:572 |
剪刀石头布 (C++代码)浏览:1811 |
蛇行矩阵 (C语言代码)浏览:559 |