草庐IT

algorithm

全部标签

c++ - 当我使用带有整数的 C++ 数学函数时,我应该担心精度吗?

例如,由于float的精度,下面的代码会产生不希望的结果。doublea=1/3.0;intb=a*3;//bwillbe0here我想知道如果我使用数学函数是否会出现类似的问题。例如inta=sqrt(4);//DoIhaveguaranteethatIwillalwaysget2here?intb=log2(8);//DoIhaveguaranteethatIwillalwaysget3here?如果不是,如何解决这个问题?编辑:其实我在为一个算法任务编程的时候遇到过这个问题。在那里我想得到thelargestintegerwhichispowerof2andislessthano

c++ - 对于简单类型C++,使用静态tmp变量重新实现std::swap()

我决定用一个inttmp变量对简单类型(例如struct或class或仅在其字段中仅使用简单类型的static)的交换函数的实现进行基准测试,以防止每次交换调用中分配内存。所以我写了这个简单的测试程序:#include#include#include#includetemplatevoidmySwap(T&a,T&b)//Likestd::swap-justfortests{Ttmp=std::move(a);a=std::move(b);b=std::move(tmp);}templatevoidmySwapStatic(T&a,T&b)//Herewithstatictmp{sta

java - 最小化图中的桥数

我试图解决一个问题,基本上可以简化为:给出一组从1到N编号的N个节点和M个边,其中N和M,找到一条边(u,v),当添加到图中时——最小化图中的桥数。如果有有许多这样的边-打印具有最低词典编纂值(value)的边。解决此问题的有效方法是什么? 最佳答案 我认为这个问题非常难。以下是我能想到的解决方案的概述:1)找出图中所有的桥。2)现在假设桥是您想要在图形中唯一的边。您只保留网桥并在大节点中加入网桥之间的所有节点。3)你现在有一棵树。边是桥梁,节点是结合了先前图中节点的“大节点”。4)我们称这个森林图为T。5)连接图T中的任意两个节点

c++ - 如何区分多边形的入站和出站边缘?

Weiler-AthertonPolygonClipping算法的基础是:从进入裁剪区域内的第一条边开始。当候选/主题多边形的边进入裁剪区域时,保存交点。当候选/主题多边形的边离开裁剪区域时,保存交点并跟随裁剪多边形。如何区分多边形的入站边和出站边?寻找入站边缘似乎涉及另一个巨大的算法,从而影响算法的效率。另一个问题是,如何找到第一个入站路口?Thisanswerseemstobesheddingsomelightontheproblem.但是,遗憾的是它不起作用。例如,如果我反转vector的方向,则角度不会取反。https://www.wolframalpha.com/input/

C++ 为什么当它们 100% 看起来匹配时会出现错误 "no matching function"?

我不明白为什么我会收到一条错误消息,指出我的函数与我定义的模板函数不匹配。在我看来,它们看起来完全一样。这是我调试中的错误:错误:没有匹配函数来调用'mergesort'newVec=mergesort(vec.begin(),vec.end());所以我可以学习和编写更好的通用函数和模板,我需要更改什么才能消除该错误?(需要说明的是,我并不是在寻求有关我的归并排序算法的帮助-我知道它有问题,但我会解决它们。)#include#includeusingnamespacestd;templatevectormergesort(typenamevector::iterator,typena

c++ - 为什么在 Edmonds-Karp 最大流量中必须考虑后缘?

我正在尝试实现Edmonds-Karp在C++中以获得最大流量,我写的略有不同:我没有遍历残差图中的所有边,而是使用邻接表仅遍历了原始图中存在的边。在用最小流量更新残差图时,我没有更新任何后边。有趣的是,当我运行我的代码时,它给出了正确的结果。所以我去了Wikipedia'sexample,它专门显示了如何使用后缘。当我将这张图输入我的代码时,我再次得到了正确的答案。我还检查了合成流矩阵,它与维基百科的相同。有人可以解释为什么我们必须添加和更新后缘,并可能举例说明它们的重要性吗?Here是我编写的代码(已更新以包括后缘): 最佳答案

c++ - 按字母顺序排序结构数组

我有一个名为Sheep的结构数组(A[#])(因为我的任务是关于绵羊DNR)。在我完成任务要求的任何任务后,我只剩下这个结构:structSheep{stringVardas;charFragmentas[CMax];intatitikme=0;};在我的里面,数据是:(stringVardas)|(charFragmentas[CMax])|(intatitikme)BaltukasTAGCTT3BailiojiATGCAA3SmarkuolisAATGAA1(charFragmentas[CMax]不会被使用所以你不必看它,我只是命名它以使其清楚)。所有这些数据都来自U2.txt文

c++ - 从 std::string 中删除特定的连续字符重复

也许任何人都有一种有效的方法来删除特定字符的连续重复,最好使用内置的字符串操作,而无需显式地遍历字符串字符。例如,当我有通配符模式并且我只想删除连续的星号(*)/aaaa/***/bbbb/ccc/aa/*****/dd-->/aaaa/*/bbbb/ccc/aa/*/dd对于所有字符重复,我可以使用std::unique通过以下方式:str.erase(std::unique(str.begin(),str.end()),str.end());但是只有特定的字符呢? 最佳答案 您可以对lambda表达式使用相同的算法std::un

c++ - 如何在 C++ 中为随机迷宫创建单元格或网格?

我正在尝试用C++创建一个随机迷宫,但我无法开始,因为我不知道如何创建网格或单元格。我怎么能创建它?而且我还想使用ASCII字符创建它。我怎样才能将它存储在数组中?(任何人都可以提供示例代码和一些解释,以便我更好地理解它)另一个问题:我需要学习和使用哪些数据结构?我打算使用Eller算法或Kruskal算法。谢谢大家帮助我!我是一名初级程序员,我想了解这一点,因为这是我项目的一部分,谢谢你变化很大! 最佳答案 你在找Mazegenerationalgorithms吗(more)?您的问题是算法还是图形?典型算法的工作原理是将迷宫中的

c++ - 哪种算法最适合具有索引分组的非连续数组?

我需要一些帮助来用C/C++编写算法(尽管任何语言示例都可以)。目的是一个容器/数组,它允许在任何索引处插入。但是,如果在不靠近现有索引的索引中插入元素,即会导致大量空桶空间。然后数组会最小化空桶。假设您有一组元素需要插入到以下索引处:1454565712865678一个连续的数组会产生一个数据结构。像这样:0123456val78val9101112val...但是,我正在寻找一种解决方案,当索引不在其最近邻居的x个存储桶内时创建一个新数组。像这样:Array16val78val101112val1314valArray254val56val57valArray35678val然后在