老铁们,大家好,相信还有很多朋友对于探索那些经典算法:若能重新选择,我会怎么做?和的相关问题不太懂,没关系,今天就由我来为大家分享分享探索那些经典算法:若能重新选择,我会怎么做?以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
八皇后问题
国际象棋中的后比中国象棋中的车更强大。皇后可以水平、垂直和对角移动,这三条线上的任何其他棋子都可以被吃掉。
八皇后问题是将八个皇后放在一个8*8的棋盘上,使得每个皇后都不能吃掉其他皇后。
八皇后
我们把问题分成8个阶段,把皇后放在第一行,第二行,……第八行。在投放过程中,我们要检查是否有不符合当前投放方式的条件。如果是,请改变放置方式;依此类推,直到填满八行。
公共类八队列{
//全局或成员变量,下标表示行,值表示皇后存放在哪一列
int[] 结果=新int[8];
int 数字=0;
公共无效cal8queens(int行){
//8个棋子全部落入,打印结果
如果(行==8){
printQueens(结果);
数字++;
//8行棋子都放好了,没办法进一步递归,所以返回
返回;
}
//每行有8种中间放置方式
for (int 列=0; 第8 列; ++列) {
//部分放置方式不符合要求
if (isOk(行, 列)) {
//行row中的棋子放置在列column中
结果[行]=列;
//检查下一行
cal8queens(行+1);
}
}
}
//判断行行列列放置是否合适
private boolean isOk(int 行, int 列) {
//分别识别左上角数组标签和右上角数组标签。
int leftup=列- 1,rightup=列+ 1;
//逐行检查每一行
for (int i=row-1; i=0; --i) {
//第i行的列column有棋子吗?
//上一行是否有相同位置
if (结果[i]==列) {
返回假;
}
//检查左上对角线:第i 行和左上列是否有棋子?
if (左上=0) {
if (结果[i]==左上){
返回假;
}
}
//检查右上对角线:第i 行和右上列是否有棋子?
如果(右上8){
if (结果[i]==右上) {
返回假;
}
}
//对于向上的每一行,位置应偏移一个空格
--左上;
++右上;
}
返回真;
}
//打印出二维矩阵
私人无效printQueens(int[] 结果) {
for (int row=0; 第8 行; ++row) {
for (int 列=0; 第8 列; ++列)
{
if (结果[行]==列)
System.out.print("Q");
别的
System.out.print("*");
}
System.out.println();
}
System.out.println();
}
公共静态无效主(字符串[]参数)
{
八队列eq=新八队列();
eq.cal8queens(0);
System.out.println("满足的排列方式为:"+eq.nums+"kinds");
}
}01 背包问题
我们有一个背包,背包的总负载为w。现在有n件物品,每件物品的重量不同,并且不可分割。我们希望选择几件物品,在不超过背包总重量的情况下,最大化背包的总重量。
我们按顺序排列项目,整个问题分为n个阶段。每个阶段判断是否有物品放入背包,并递归处理剩余物品:package lms;
公开课包
{
//存储背包内物品的最大总重量
私有int maxW=Integer.MIN_VALUE;
私有静态int MAX_NUM=50;
私有int[] 选择=new int[MAX_NUM];
//cw表示当前加载的物品的重量总和; i 代表已检查的项目;
//w 背包重量; items代表每件物品的重量; n 代表项目数量
//假设背包可承受的重量为100,物品数量为10,物品的重量存储在数组a中,那么函数可以这样调用:
//f(0, 0, a, 10, 100)
公共无效f(int i,int cw,int []项目,int n,int w){
//CW==W 表示已满;
//i==n 表示所有项目都已检查完毕
if (cw==w || i==n) {
if (cw maxW) {
最大W=CW;
}
返回;
}
//从最后一项开始
f(i+1, CW, 项目, n, w);
if (cw + items[i]=w) {
f(i+1,cw + items[i], items, n, w);
}
}
公共静态无效主(字符串[]参数)
{
int num=5,容量=10;
int[]weight_list=new int[]{2,2,6,5,4};
袋b=new Bag();
b.f(0,0,weight_list,num,容量);
System.out.println("最大可放置物品总重量为:"+b.maxW);
关于探索那些经典算法:若能重新选择,我会怎么做?到此分享完毕,希望能帮助到您。
【探索那些经典算法:若能重新选择,我会怎么做?】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
想象一下,要是能从头再来一遍,会选哪些经典算法?太有意思了!
有16位网友表示赞同!
那些古老的算法依然让人觉得厉害啊,说不定未来还能有新的应用?
有14位网友表示赞同!
如果可以重新选择,我一定想学习一些更高级的算法!
有10位网友表示赞同!
这篇文章是不是分析一下经典算法的优缺点?很期待看看作者的想法!
有19位网友表示赞同!
算法的发展真是太快了,那些曾被奉为经典的,现在看来又能用什么地方呢?
有19位网友表示赞同!
学习算法真的很有挑战性,但也是非常有成就感的!
有19位网友表示赞同!
我超喜欢那些能解决实际问题的算法!
有11位网友表示赞同!
那些老一代的算法在如今的领域还能发挥作用吗?挺想了解一下。
有13位网友表示赞同!
看来要好好回顾一下那些经典算法了!
有12位网友表示赞同!
学习算法就像练拳脚,需要不断练习和总结经验!
有7位网友表示赞同!
希望这篇文章能给我一些新的思路和启发!
有10位网友表示赞同!
我觉得最重要的是算法简洁易懂,这样才能更好地应用在实际中。
有6位网友表示赞同!
那些经典算法背后的故事一定也很精彩吧?
有14位网友表示赞同!
算法的未来发展趋势是什么呢?
有5位网友表示赞同!
学习算法不仅仅是为了考试,更重要的是锻炼逻辑思维能力!
有19位网友表示赞同!
想要成为一名合格的程序员,必须掌握那些经典算法!
有14位网友表示赞同!
我很喜欢研究那些新兴的算法,但也要了解那些老一辈的算法。
有18位网友表示赞同!
经典算法总是值得反复学习和研究!
有19位网友表示赞同!
期待看到这篇文章的分析和解读!
有12位网友表示赞同!