数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
来源:互联网 发布:生产流程优化方案研究 编辑:程序博客网 时间:2024/04/27 14:38
有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个?
解:
这个问题可以有二叉树解决,活着的人是二叉树的头,当一个结点有父节点时,父节点一定会被子节点吃掉,也就是只要有子节点的结点,就是被僵尸吃掉的人。如图:
1
/ \
1 1
/ \ / \
1 1 1 1
package Struture;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Zombi {
private int[] array = new int[100];
private static List<Node> nodeList1;
private static int count = 0;
/**
* 内部类
*
* @author SONY
*
*/
private static class Node {
Node leftChild;
Node rightChild;
int data;
Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
}
/**
* 用循环做一个100个节点的数组,每个数组元素都为1,这个没什么特殊要求,个人爱好
*/
public void arrayTree() {
for (int i = 0; i < 100; i++) {
array[i] = i + 1;
// System.out.println(array[i]);
}
// System.out.println(array);
}
public void createBinTree2() {
nodeList1 = new LinkedList<Node>();
for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
nodeList1.add(new Node(array[nodeIndex]));
}
for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
nodeList1.get(parentIndex).leftChild = nodeList1
.get(parentIndex * 2 + 1);
nodeList1.get(parentIndex).rightChild = nodeList1
.get(parentIndex * 2 + 2);
}
int lastParentIndex = array.length / 2 - 1;
nodeList1.get(lastParentIndex).rightChild = nodeList1
.get(lastParentIndex);
if (array.length % 2 == 1) {
nodeList1.get(lastParentIndex).rightChild = nodeList1
.get(lastParentIndex * 2 + 2);
}
}
/*
* public int[] getArray() { return array; } public void setArray(int[]
* array) {
*
* for(int i=0;i<100;i++){ array[i]=i; }
*
* this.array = array; }
*/
/**
* 先序遍历 这三种遍历结构都一样,只是先后顺序不一样
*/
public static int preOrderTraverse2(Node node) {
if (node == null) {
return 0;
}
if (node.leftChild == null && node.rightChild == null) {
return 1;
}
System.out.print(node.data + " ");
return preOrderTraverse2(node.leftChild) + preOrderTraverse2(node.rightChild);
}
public static void main(String[] args) {
Zombi tree = new Zombi();
tree.arrayTree();
tree.createBinTree2();
for(int i=0;i<nodeList1.size();i++){
if(nodeList1.get(i).leftChild==null&&nodeList1.get(i).rightChild==null){
System.out.println(nodeList1.get(i).data);
}
}
}
}
0 0
- 数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
- c编程:僵尸吃大脑
- 我和僵尸有个约会·僵尸游戏精选
- 回忆《我和僵尸有个约会1》里的感情
- 僵尸进程出现了
- 僵尸和僵尸进程的那些事
- 我个技术宅也无聊了自编一个植物大战僵尸网上在线恶搞版(有视频有游戏有真相)
- 僵尸网络的4个发展阶段
- 吃了个大西瓜
- 什么是僵尸进程,有何危害?怎么避免僵尸进程?
- 哪里有无法查证的吃了让人得肝癌晚期的药卖
- 1、定义普通僵尸类: 实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。 方法:初始化方法(设置僵尸种类,总血量)、被打击失血、死亡。
- 猴子吃桃问题,第一天摘若干,吃了一半,又吃了一个,第二天依旧如此.第十天还剩一个,问第一天摘了多少个?
- 数据结构 僵尸问题
- 有一个和尚负责做馒头,做好30个其它三个和尚就可以吃馒头, *当馒头吃完了,第一个和尚就再做30个馒头 生产消费
- 僵尸进程和如何删除僵尸进程
- 人民网评:政府网站不能有“僵尸”
- 有吃的!
- c语言联合union 的联合变量,联合标记,联合类型定义的区别
- PHPCMS 前台模板集合
- 蓝桥杯 BASIC-23 基础练习 芯片测试
- 【C语言】写一个宏交换数字的奇数位与偶数位
- Java面试题(干货~)
- 数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
- Java实现 图片水印或者文字水印
- 码神-day9-java
- UITableView修改索引的方法
- 动态特性
- scala基础23-正则表达式
- 给Xcode添加删除、复制当前行快捷键
- 蓝桥杯 BASIC-24 基础练习 龟兔赛跑预测
- 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。