马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
m =[[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]]
按照马走日的规则(2*3的对角线),只能跳数字1,同一个1可以跳多次,
问,这个二维数组需要几匹马,才可以跳完数组里所有的一,
答案是七次,
图片里面不同的颜色或者图标的代表一匹马走过的1.
用递归比较容易完成。
- m =[[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
- [0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
- [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
- [0, 0, 0, 1, 0, 1, 1, 0, 0, 0],
- [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
- [1, 0, 0, 0, 0, 0, 0, 0, 1, 1],
- [0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
- [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]]
- col = len(m)
- row = len(m[0])
- count = 0
- def move(i, j):
- try:
- if i >= 0 and j >= 0 and m[i][j] == 1:
- m[i][j] = 2
- move(i - 2, j + 1)
- move(i - 1, j + 2)
- move(i + 1, j + 2)
- move(i + 2, j + 1)
- move(i + 2, j - 1)
- move(i + 1, j - 2)
- move(i - 1, j - 2)
- move(i - 2, j - 1)
- except IndexError:
- pass
-
-
-
- for i in range(col):
- for j in range(row):
- if m[i][j] == 1:
- count += 1
- move(i, j)
- print(count)
复制代码
|