完全二叉树的权值&&受伤的皇后

文章讲述了两道编程题,第一题涉及完全二叉树,需要找出最大节点权值所在的深度,通过计算每一层的权值和找到最大值。第二题是国际象棋棋盘上摆放皇后的问题,要求皇后不在同一行、列和45度斜线上,使用DFS搜索求解方案数量。

题目

给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1​,A2​,⋅⋅⋅AN​,如下图所示:

现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。

注:根的深度是 1。

思路

计算每一层的合,然后找到最大的值。因为是完全二叉树,所以第i层的数下标为[2**(i-1) -1: 2**i -1] (数字用数字存起来,i表示数组的下标)。因为不是满二叉树,因此最后一层不能用该公式,直接【起点:最后一个数】

代码

import os
import sys

# 请在此输入您的代码
n = int(input())
date = list(map(int, input().split()))

for i in range(n+1):
  if 2 ** i - 1 >= n:
    layers = i
    break
add = []
for i in range(1, layers): # 第一层到倒数第二层
  layer_max = sum(date[2**(i-1) - 1: 2**i-1])
  add.append(layer_max)

add.append(sum(date[2**(layers-1) -1 :])) # 最后一层的合

print(add.index(max(add))+ 1)

题目

有一个 n×n 的国际象棋棋盘(n 行 n 列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求:

  1. 任何两个皇后不在同一行。
  2. 任何两个皇后不在同一列。
  3. 如果两个皇后在同一条 45 度角的斜线上,这两个皇后之间行号的差值至少为 3 。

请问一共有多少种摆放方案。

输入描述

输入的第一行包含一个整数 n。

其中,1≤n≤10。

输出描述

输出一个整数,表示答案。

思路

 很懵,不是很懂。看了别人的代码也不太懂,先放在这里

代码

    n=int(input())
    col=[-99]*n #这个列表记录每一行的皇后在第几列,这里的初始值设置较大一点不然会影响后面的斜45度判断条件
    count=0
 
    def dfs(row):
        global n,col,count #声明使用这几个全局变量
        if row==n:
            count+=1#由于在n*n的棋盘放n只皇后又不重行说明到遍历到最会一行既产生一种可能
 
        else:
            for _col in range(n):#每列遍历所有行
                flag=True
                for _row in range(n):#col[_row]=_col表示皇后存放在了第_row行的第_col列
                    if _col==col[_row]:
                        flag=False#说明当前行的当前列
                    elif abs(row-_row)==abs(_col-col[_row]) and abs(row-_row)<3:
                        flag=False
                if flag:#说明第row行第_col列可以存放
                    col[row]=_col#标记
                    dfs(row+1)#为下一行寻找合适的列放入皇后
                    col[row]=-99#因为要回溯,就是做完了这一行的这一列要换一列。
    dfs(0)#从第0行开始
    print(count)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值