算法分析:

首先对于题目的要求 我们需要用一个数据结构去存储相应的捕食关系!

可以考虑使用图进行存储 不过这里用一个动态数组构成的结构体进行关系存储

每个结构体代表一个生物 其中存储了其前驱和后继 分别用于表示捕食和被捕食的关系

之后每轮的循环中将相应的最长链长度存储到Max变量中 依次比较最后输出

传入的变量b c  分别表示被捕食者捕食者 那么就相应的存储a[b].out.push_back(c)

同理对于c而言应该将b存入自己的食物列表 也就是in  即a[c].in.push_back(b)

经过以上循环m次以后 顺利将输入的m条关系都存储完毕

接下来我们从食物链的开端 生产者进行遍历 生产者的特点也就是其in的长度为0

之后我们对这些符合条件的生物调用dfs函数进行处理

之后我们用N表示每次的长度 所以从生产者开始进行N++表示生产者开始的长度

之后每当后续的out不为0  则对其每一个后继进行遍历 之后的分支依次递归调用dfs函数进行处理

当每一条食物链没有后继也就表示结束了 之后将其的N的长度和Max进行比较 将最大的长度存入Max最后用于输出即是最长的长度

注意点:理解上的难点

我们每次循环递归调用dfs的时候 最开始全局变量N都会加1  那么本次循环处理完毕以后为了不影响下一轮的循环 需要把加上的N减去 这样才会正常循环  如果本轮循环还存在后续的子递归循环 那么也一样N++结束以后N--  总的来说N是保持不变的

记得每次最大的循环输出结果以后 把全局变量Max置0 以免影响下一次的循环

代码部分:

#include<bits/stdc++.h>
using namespace std;
int N = 0;
struct A {vector<int> in = vector<int>(0);//存储入度,即前驱vector<int> out = vector<int>(0);//存储出度,即后继
};
int Max = 0;
void dfs(int t, A a[]) {N++;if (a[t].out.size() == 0) {Max = max(Max, N);return;}else {for (int i = 0; i < a[t].out.size(); i++) {dfs(a[t].out[i], a);N--;}}
}
int main() {int n;//生物种类,即节点数量int m;//关系数,即边的数量while (cin >> n >> m) {Max = 0;A* a = new A[n + 1];//动态分配结构体对象内存,每个生物节点分配一个int b;//被捕食者int c;//捕食者for (int i = 0; i < m; i++) {cin >> b >> c;a[b].out.push_back(c);a[c].in.push_back(b);}for (int i = 1; i <= n; i++) {if (a[i].in.size() == 0) {dfs(i, a);N = 0;}}cout << Max << endl;Max=0;}return 0;
}

算法设计例题分析 食物链相关推荐

  1. C++算法设计与分析例题代码(基础篇)

    C++算法设计与分析例题代码 前言 一.求1/1!-1/3!+1/5!-1/7!+...+(-1)^(n+1)/(2n-1)! 二.一个数如果恰好等于它的因子之和(包括1,但不包含这个数本身),这个数 ...

  2. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  3. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

  4. 算法设计与分析第七章分支限界算法(完结篇)

    算法设计与分析第七章分支限界算法 一.分支界限算法概述 1.分支限界法类似于回溯法,是一种在问题的解空间树上搜索问题解的算法. 分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解 ...

  5. 算法设计与分析之最大流问题

    最近在复习算法 对最大流问题加以学习和总结 配套视频学习效果更加 算法设计与分析_北京航空航天大学_中国大学MOOC(慕课) (icourse163.org) 一.实际背景/应用场景 最大流算法作为算 ...

  6. 程振波 算法设计与分析_算法设计与分析

    本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...

  7. 算法设计与分析复习笔记(上)

    简介:本文是博主在复习算法设计与分析的笔记,参考了北大算法设计与分析以及王晓东编著的<计算机算法设计与分析>第四版相关内容,如有错误,欢迎指正. 文章目录 设计技术 分治 动态规划 设计技 ...

  8. 算法设计与分析——分治法

    主要思想 (其实有这个思想也想不出来): 1.划分:整个问题划分成多个子问题 2.求解:求解各子问题的解 3.合并:合并子问题的解 (手说:"我会了",脑子:"不会&qu ...

  9. 算法设计与分析--期末复习重点总结

    目录 一.算法概述 1.算法的定义与特性 2.数学证明法 3.算法复杂性分析方法 4.渐进分析 二.递归与分治策略 1.递归概念 2.递归算法设计示例 3.递归算法分析 4.分治基本思想 5.分治算法 ...

最新文章

  1. 大唐波斯将军 机器人_参观长沙博物馆“粟特人在大唐”文物展,感叹多元文明的交融互鉴...
  2. python不知道错在哪里怎么办_python怎么处理错误和异常
  3. java后台接收数据格式_Java后台基于POST获取JSON格式数据
  4. Rar Java Zip
  5. LeetCode-计数质数
  6. 深度学习白话_如何提高论文的深度?
  7. atitit.产品console 日志的aticonsole 方案处理总结
  8. python基于django的学生在线考试自动阅卷系统(含错题本功能)
  9. Python学习笔记(15) 网络爬虫使用proxy实现自动换IP防封锁
  10. Python知识点之Python进阶
  11. excel 图表 保持矢量图格式 粘贴进word
  12. Python 数组高级索引
  13. 【好文】敏捷中国十八年目睹之怪现状
  14. 计算机存储器分级结构,存储器
  15. C#中的事件(event)
  16. linux桌面图标恢复,修复桌面白图标的教程
  17. mysql enclosed by_MySql csv文件导入导出
  18. 用jq做一个点击图片放大消失
  19. 第十一章:MATLAB:符号运算(符号与数值,符号矩阵)
  20. opencv cvRound函数cvClone

热门文章

  1. 春夏秋冬又一春之Redis持久化
  2. Java——26个字母
  3. 程序员的终极浪漫,用python画一棵你的专属圣诞树
  4. NX二次开发-UFUN移动工程图视图UF_DRAW_move_view
  5. bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
  6. vue简单的金额计算
  7. Joplin笔记 android,Joplin(桌面云笔记软件)
  8. ExcelJs导出Excel文件并设置单元格样式
  9. android 项目导入另一个Android项目作为子模块调用
  10. 软件测试工程师简历项目经验怎么写?--1000个已成功入职的软件测试工程师简历范文模板(真实简历)