小猫爬山c语言(回溯法)

本文通过深度优先搜索(DFS)解决小猫爬山问题,即如何将已排序的小猫按重量分配到缆车上,最小化缆车使用数量。在分配过程中,优先考虑重量大的小猫,当租用缆车数量达到需求时进行回溯。
摘要由CSDN通过智能技术生成

分析

可以尝试把小猫分配到一辆已经租用的缆车上,或者用另外的一辆缆车;用深度优先搜索dfs(now,hire)来现在处理当前的这只猫,前面的now-1只是已经分配好了的,目前也已经租用了hire辆缆车。首先把当前的这只小猫分配到已经租用的缆车上,也就是已经租用缆车的循环,如果能分配那对应的缆车b数组来累加小猫的重量,然后递归后面一只小猫,直至所有小猫完成。如果前面已经租用的不装,考虑用新的缆车,就让当前的小猫到重新租用的新缆车上,相应的已经租用缆车数量+1,递归后面一只小猫。在当已经租用的缆车数量大于等于需要的数量时回溯,这题需要注意的是重量大的小猫难运输,把小猫的重量进行排序后,优先考虑重量大的小猫。

代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int N,W;//小猫数量,小猫的重量
int a[100],b[100],number;//小猫的重量数组,缆车所承受的重量数组,需要缆车的数量 
void sort(int m){
    //冒泡排序,对小猫的重量进行排序 
  int i,j;
  double t;
  for(i=
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值