Questions tagged «graph-theory»

对于有关图形的挑战,使用数学结构来建模对象之间的关系。

3
解决手推车问题
哲学家们一直在思考台车问题。不幸的是,还没有人解决过这个问题。幸运的是,作为程序员,我们可以使用计算机为我们解决问题! 输入值 您的程序将输入一个(有限的)有向图(最多有一个从x到的边y,对于任何x和而言y),并带有一个指定的节点,并且在每个边上附加一个非负整数(表示与该轨道相关的人数) 。另外,每个节点至少具有一个出口边缘。 手推车从指定的节点开始。每次转弯时,如果手推车在节点处x,那么功利主义者就会选择一条边(x,y)。那个边缘的人死了,手推车现在处于边缘y。这个过程将永远持续下去。 请注意,人只能死一次,因此,如果边缘(x,y)将n人绑在其上,而手推车经过它们,例如,滑过100次,它仍然只会导致n死亡。 输出量 功利主义者以使死亡人数最小化的方式做出选择(这是有限的,因为只有有限的人)。您的程序将输出该号码。 输入格式 您可以按照自己喜欢的任何合理方式获取输入图。例如,您可以将其作为矩阵,并将指定的节点计为标记为0的节点。或者可以使用x1,y1,n1;x2,y2,n2;...。例如0,a,0;a,b,5;a,c,1;b,b,0;c,c,0,代表标准手推车问题(末尾带有循环)。 测试用例 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0 -> 1(从0到a,从a到c(杀死一个人),然后继续将手推车从c循环到c)。 0,0,1;0,a,5;a,a,0 -> 1(保持从0到0,永远超过1个人), 0,a,5;0,b,1;a,a,1;b,b,6 -> 6(0-> a-> a-> a-> a-> ...(请注意,转到b的贪婪解是不正确的)) 0,a,1;0,b,5;a,b,1;b,a,1 -> 3(0-> a-> b-> a-> b-> ...) 0,a,1;0,b,1;a,a,0;b,b,0 -> 1(请注意,功利主义者可能采取两种不同的选择,即两者都只会杀死一个人) 这是代码高尔夫球,所以最短的答案会成功!祝好运。 注意:不会出现恶性循环,并且禁止多轨漂移。同样,尽管我更喜欢从阿西莫夫的三个定律来考虑这个问题,彼得·泰勒在沙盒中指出,这个问题在数学上等同于找到权重最低的rho(使循环返回自身的路径) 。

3
计算树宽
无向图的树宽是图论中一个非常重要的概念。发明了许多图算法,如果您分解出具有小树宽的图,则该算法运行很快。 树宽通常根据树分解来定义。这是一个图以及该图的树分解,由维基百科提供: 树分解是一棵树,其中每个顶点与原始图的顶点子集相关联,具有以下属性: 原始图中的每个顶点都在至少一个子集中。 原始图中的每个边都在至少一个子集中拥有两个顶点。 分解中所有子集包含给定原始顶点的顶点都已连接。 您可以检查上述分解是否遵循这些规则。树分解的宽度是其最大子集的大小减去一。因此,以上分解为二。图的树宽是该图的任何树分解的最小宽度。 在此挑战中,将为您提供一个连接的,无向的图,并且您必须找到其树宽。 虽然很难找到树分解,但还有其他方法可以计算树宽。Wikipedia页面上有更多信息,但是此处未提及的计算树宽的一种方法(最小消除顺序宽度)是算法中常用的一种计算树宽的方法。有关此事实的论文,请参见此处。 在消除顺序中,一次消除一个图形的所有顶点。消除每个顶点后,将添加边,以将该顶点的所有邻居彼此连接。重复此操作,直到所有顶点消失。消除顺序宽度是此过程中要消除的任何顶点具有的最大邻居数。树形宽度等于消除顺序宽度的所有顺序中的最小值。这是一个使用此事实来计算树宽的示例程序: import itertools def elimination_width(graph): max_neighbors = 0 for i in sorted(set(itertools.chain.from_iterable(graph))): neighbors = set([a for (a, b) in graph if b == i] + [b for (a, b) in graph if a == i]) max_neighbors = max(len(neighbors), max_neighbors) graph = …

3
二维平面上的最长路径
为您提供了一组任意的,任意的2d整数笛卡尔坐标:例如[[(0,0),(0,1),(1,0)] 从这组坐标中找到可能的最长路径,并限制只能“访问”一次坐标。(而且您不会“回到”开始时的坐标)。 重要: 您不能“越过”坐标或其周围。例如,在最后一个音符示例(矩形)中,您不能不访问C就从D移到A (这可能是重新访问,从而使找到的长度无效)。@FryAmTheEggman指出了这一点。 函数输入:二维笛卡尔坐标数组 函数输出:仅最大长度 获胜者: 最短代码获胜,没有保留被禁止(不是时空效率最高的) 例子 1:在上面所示的情况下,没有两次“访问”坐标的最长路径是A-> B-> O(或OBA或BAO),并且路径长度是sqrt(2)+ 1 = 2.414 2:在上述情况下,两次没有坐标“访问”的最长路径是ABOC(显然是COBA,OCAB等),对于所示的单位平方,它计算为sqrt(2)+ sqrt(2)+ 1 = 3.828。 注意:这是一个额外的测试用例,它不如前两个示例那么简单。这是由6个坐标组成的矩形: 在这里,最长的路径是:A-> E-> C-> O-> D-> B,即8.7147 (最大可能的对角线走过且没有横越任何边)

1
计数坎宁安链
素数总是让人着迷。2300年前,欧几里得在他的《元素》中写道 质数是仅由一个单位测量的质数。 这意味着素只能被 1(或本身)。 人们一直在寻找素数之间的关系,并提出了一些非常奇怪的东西(如“有趣的”)。 例如,一个索菲·热尔曼质数是一个主要p针对2*p+1也是素数。 一个安全素是一种主要p用于哪些(p-1)/2也是黄金,而这正是一个索菲·热尔曼质数的倒退状态。 这些与我们在此挑战中寻找的东西有关。 一个坎宁安链型我是一系列素数,其中除了最后一个的每一个元素是的索菲·热尔曼质数,而除了第一个的每一个元素是一个安全的黄金。该链中元素的数量称为它的length。 这意味着我们从素数开始p计算q=2*p+1。如果也q为质数,则我们有长度为2的I型Cunnigham链。然后进行测试2*q+1,以此类推,直到下一个生成的数字为复合数为止。 II型坎宁安链是按照几乎相同的原理构造的,唯一的区别是我们检查了2*p-1在每个阶段。 坎宁安链的长度可以为1,这意味着2 * p + 1和2 * p-1都不是素数。我们对这些不感兴趣。 坎宁安链的一些例子 2启动长度为5的I型链。 2, 5, 11, 23, 47 下一个构造的数字95不是素数。 这也告诉我们,那5,11,23和47不启动类型的任何链我,因为这将有前述的元素。 2也开始长度为3的II型链。 2, 3, 5 接下来是9,这不是素数。 让我们尝试II11型(之前我们将其排除在I型之外)。 好吧,接下来是下一个,它不是素数,因此该“链”的长度为1,我们不将其计入此挑战。21 挑战 写一个程序或功能,给定一个号码n作为输入,写入/返回的起始数第n个的坎宁安链I或II型的至少长度为2,后跟一个空格,随后链的类型它开始(我或II),然后是冒号,然后是该类型链的长度。万一素数同时启动两种类型的链(类型I 和型 II型),则首先计算型链。 例: 2 I:5 请记住,这n可能是任何类型的先前启动链的一部分,在这种情况下,不应将其视为该类型链的起始编号。 让我们看看这是如何开始的 我们从开始2。由于它是第一个素数,因此我们可以确定没有链从包含的较低素数开始2。 类型I中的下一个数字将是2*2+1 == 5。5是素数,因此我们已经有了至少长度为2的链。 我们将其视为第一条链。那II型呢?下一个号码是2*2-1 == 3。3是素数,因此II型的链长也至少为2。 …

3
计算长度为n的莫比乌斯梯子上的受限森林数量
OEIS序列A020872对Möbius梯 M n上的限制林进行计数。 挑战 面临的挑战是编写一个程序,该程序将整数作为输入n > 1并返回A020872(n)Möbius梯子M n上的受限林数。这是代码高尔夫球,因此最短的代码获胜。(别有用心的是也许将此序列的长度延长一点。) 定义 甲受限森林是图的一个分区,使得每个部分可以是一个(无向)路径或分离的顶点。 所述莫比乌斯梯子中号Ñ是可以想到的2n边形与所有相对顶点之间画出的对角线的曲线图。 例 这是M 2(画有对角线的正方形)上的34个受限森林。请注意,第一个图被划分为四个孤立的顶点,第二个图被划分为一个路径和两个孤立的顶点,依此类推。

12
小拉姆齐数
背景:Ramsey数R (r ,s )R(r,s)R(r,s)给出的顶点的最小数目vvv的完全图ķvKvK_v,使得红色/蓝色边缘的着色ķvKvK_v具有至少一个红ķ[RKrK_r或一个蓝色ķsKsK_s。对于较大的边界[R ,小号r,sr, s是很难建立。 你的任务是输出数R (r ,s )R(r,s)R(r,s)为1个≤ [R ,s ^ ≤ 51≤r,s≤51 \le r,s \le 5。 输入值 两个整数[R ,小号r,sr, s用1 ≤ [R ≤ 51≤r≤51 \le r \le 5和1 ≤ 小号≤ 51≤s≤51 \le s \le 5 。 输出量 R (r ,s )R(r,s)R(r,s)表中给出的 R (r ,s ): s 1 …

30
从原动力中恢复原动力
定义:素数幂是自然数,可以以p n的形式表示,其中p是素数,n是自然数。 任务:给定素数p n > 1,返回素数p。 测试用例: input output 9 3 16 2 343 7 2687 2687 59049 3 计分:这是代码高尔夫球。以字节为单位的最短答案将获胜。
13 code-golf  arithmetic  primes  king-of-the-hill  python  board-game  code-golf  number  subsequence  code-golf  ascii-art  code-golf  array-manipulation  decision-problem  grid  fastest-algorithm  logic-gates  logic  code-golf  cards  code-golf  rational-numbers  code-golf  math  number  sequence  code-golf  array-manipulation  integer  code-golf  number  array-manipulation  code-golf  number  sequence  decision-problem  code-golf  ascii-art  number  code-challenge  sequence  arithmetic  sorting  code-golf  date  fastest-algorithm  code-golf  string  number  random  combinatorics  code-golf  combinatorics  code-golf  ascii-art  base-conversion  code-golf  array-manipulation  code-golf  string  code-golf  string  number  arithmetic  code-golf  kolmogorov-complexity  code-golf  string  array-manipulation  json  code-golf  puzzle-solver  code-golf  binary  graph-theory  code-golf  arithmetic  haskell  code-golf  string  cipher  code-golf  code-golf  string  parsing  alphabet  code-golf  string  code-golf  ascii-art  code-golf  string  number  code-golf  string  balanced-string 

7
迷宫中的切点
迷宫以任何方便的格式表示为0(墙壁)和1(可步行空间)的矩阵。每个单元都被视为连接到其4个(或更少)正交邻居。阿连接成分是一组可行走单元中的所有传递地彼此连接的。您的任务是确定切入点 -可行走的单元格,如果将它们变成墙壁,将改变连接的组件数。仅在这些位置输出带有1-s的布尔矩阵。我们的目标是用最少的代码字节做到这一点。 输入矩阵将至少包含3行和3列。它的至少一个单元将是一堵墙,至少一个将是可步行的。您的函数或程序必须能够在一分钟内在TIO上(或在您自己的计算机上,如果TIO不支持该语言)处理下面的任何示例。 in: 11101001 11011101 00000001 11101111 11110101 00011111 10110001 11111111 out: 01000000 00001001 00000001 00000101 00110000 00010000 00000000 11100000 in: 1111111111111111 1000000000000001 1111111111111101 0000000000000101 1111111111110101 1000000000010101 1011111111010101 1010000001010101 1010111101010101 1010101111010101 1010100000010101 1010111111110101 1010000000000101 1011111111111101 1000000000000001 1111111111111111 out: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 …

3
出色的扫雷
Hexcells是一款基于Minesweeper的六边形游戏。(完全披露:我与Hexcells无关。事实上,我并不真正喜欢游戏。)大多数Hexcells规则都可以很容易地用Generalized Minesweeper(在任意图表上播放的Minesweeper)表示。{X}和-X-规则是最困难的一个。 该{X}规则告诉我们,一个X地雷与地雷接壤,所有这些地雷以连续的路径彼此接壤。例如,如果我们有董事会: ? ? ? {3} ? ? ? 排雷的6种可能性是 * . . . . . . * * * * * * {3} . * {3} . . {3} * . {3} * . {3} * * {3} . * . * * * * . * . …

4
是二人的吗?
甲二分图是其顶点可分为两个不相交的集合,使得没有边缘在同一组连接两个顶点的曲线图。当且仅当图是2色时,图才是二部图。 挑战 给定一个无向简单图的邻接矩阵,您的任务是确定它是否是二部图。也就是说,如果一条边连接顶点i和j,则矩阵的(i,j)和(j,i)项均为1。 由于图是无向且简单的,因此其邻接矩阵是对称的,并且仅包含0和1。 细节 您应该采用N×N矩阵作为输入(任何形式,例如列表列表,字符串列表,类似C的字符串int**和大小,展平的数组,原始输入等)。 如果该图是二部图的,则函数/程序应返回/输出真实值,否则返回falsy。 测试用例 ['00101', '00010', '10001', '01000', '10100'] : False ['010100', '100011', '000100', '101000', '010000', '010000'] : True (divide into {0, 2, 4, 5} and {1, 3}) ['00', '00'] : True 计分 禁止直接计算答案的内建函数。 这是代码高尔夫球,因此,本月底之前最短的程序(以字节为单位)将获胜!

7
找到一组最大匹配边
考虑一个连接的无向图。甲边缘的匹配组在此图被定义为一组边,使得在该组共享的任何两个边缘公共顶点的。例如,左图表示绿色的匹配集,而右图表示红色的不匹配集。 匹配集称为maximally matching,maximal matching如果不可能将图的另一条边添加到匹配集,则为。因此,以上两个示例都不是最大匹配集,但是下面两个蓝色的集合都是最大匹配。请注意,最大匹配不一定是唯一的。此外,不要求图形的每个可能最大匹配的大小都应等于另一个匹配。 挑战的目标是编写程序/函数以找到图形的最大匹配。 输入值 假设输入图的所有顶点都有一些连续的整数编号,这些编号从您选择的任何起始整数值开始。一条边由表示该边连接的顶点的无序整数对来描述。例如,上面显示的图形可以使用以下无序边集来描述(假设顶点的编号从0开始): [(0,1), (0,2), (1,3), (1,4), (2,3), (3,4), (3,5), (5,6)] 描述图的另一种方法是通过邻接表。这是上图的邻接表示例: [0:(1,2), 1:(0,3,4), 2:(0,3), 3:(1,2,4,5), 4:(1,3), 5:(3,6), 6:(5)] 您的程序/函数必须从任何来源(stdio,函数参数等)获取图形作为输入。只要没有其他无关紧要的信息传达给您的程序,您就可以使用所需的任何符号。例如,一个额外的参数表示输入边的数量是完全可以接受的。类似地,传入无序的边,邻接表或邻接矩阵的多集也可以。 您可以假设: 图形已连接(例如,可以在给定任何起始顶点的情况下到达任何顶点)。 至少有一条边缘。 边永远不会将顶点直接连接到自身(例如,边(1,1)不会作为输入提供)。请注意,循环仍然可能(例如:上图)。 您可能需要输入顶点从任何索引处开始(例如,第一个顶点可以是0、1,-1等)。 顶点编号从您选择的起始索引开始按顺序增加(例如:1,2,3,4,...或0,1,2,3,...)。 输出量 您的程序/函数应输出表示最大匹配集的边列表。一条边由该边连接的两个顶点定义。例如 左蓝色组的输出(使用示例输入顶点顺序): [(1,4), (2,3), (5,6)] 注意,顶点的顺序并不重要。因此,以下输出描述了相同的匹配集: [(4,1), (2,3), (6,5)] 输出可能是到stdout,文件,函数返回值等。 例子 这是一些示例输入(使用邻接表格式)。这些示例碰巧开始在处计算顶点0。 请注意,没有给出示例输出,而是提供了Python 3验证代码。 [0:(1), 1:(0)] [0:(1,2), 1:(0,3,4), 2:(0,3), …

4
负空间图
任务 您将得到一个正整数,并且必须输出具有这么多节点的“ 自补图 ”。如果您不知道什么是自助图,那么维基百科的文章将无济于事,因此以下是两种解释,一种是技术性的解释,另一种是非技术性的解释。 非技术 图是一组由线连接的节点。每对点可以通过一条线连接或不连接。图的“补码”是获取图并连接所有未连接的节点并断开所有已连接的节点的结果。 自补图是可以将补码重新排列为原始形状的图。下面是一个自补图的示例以及如何进行演示。 这是一个有5个节点的图形: 我们将用红色虚线突出显示可以进行连接的所有地方: 现在,我们将通过交换红色和黑色边缘来找到图形的补码: 这看起来不像原始图,但是如果我们像这样移动节点(每个步骤交换两个节点): 我们得到原始图!该图及其补图是同一图 技术 自补图是与其补图同构的图。 技术指标 通过最适合您的方法,您将收到一个正整数。然后,您将以您认为合适的任何方法输出图形,包括但不限于邻接矩阵表单,邻接列表表单,当然还有图片!输出的图必须是其自己的补码,并且具有与整数输入一样多的节点。如果不存在这样的图形,则必须输出一个伪造的值。 这是代码高尔夫球,您应努力减少字节数。 测试用例 以下是几个n的可能输出的图片 4 5 9

4
获取吸气剂
任务 我想每个人都喜欢自动代码生成并节省工作时间。您白天必须创建许多类和成员,而又不想getters手动创建所有这些类和成员。 任务是编写一个程序或函数,该程序或函数getters将为您自动为所有类成员生成。 输入 在我们的语言中,对象非常简单。类和成员的名称必须以字符开头,[a-zA-Z]并且只能包含字符[a-zA-Z0-9]。这是一个例子: class Stack { public overflow; protected trace; private errorReport; } 输出 这是基于给定示例的有效输出: class Stack { public overflow; protected trace; private errorReport; public function getOverflow() { return this->overflow; } public function getTrace() { return this->trace; } public function getErrorReport() { return this->errorReport; } } 吸气剂 getter方法的要求是: …
13 code-golf  string  syntax  code-golf  math  primes  rational-numbers  code-golf  graphical-output  image-processing  code-golf  kolmogorov-complexity  music  audio  code-golf  string  code-golf  math  geometry  code-golf  math  sequence  combinatorics  code-golf  game  grid  board-game  code-golf  restricted-source  array-manipulation  source-layout  code-golf  base-conversion  binary  code-golf  math  physics  code-golf  math  number  date  expression-building  code-golf  array-manipulation  graph-theory  decision-problem  popularity-contest  error-correction  code-golf  kolmogorov-complexity  geometry  grid  code-challenge  arithmetic  combinatorics  set-partitions  code-golf  kolmogorov-complexity  sequence  fibonacci  code-golf  restricted-source  pristine-programming  code-golf  code-golf  string  kolmogorov-complexity  code-golf  arithmetic  code-golf  string  parsing  code-golf  code-golf  sorting  counting  permutations  3d  code-golf  code-golf  ascii-art  music  code-golf  string  code-golf  string  ascii-art  code-golf  string  code-golf  quine  polyglot  code-golf  math  string  code-golf  internet 

1
拯救大雁免于灭绝
被称为Alex A的鹅种以其居于由64个单元格组成的三角形网格中而闻名: (图片来自这个无关的欧拉项目问题。) 我们将用数字标记每个单元格,0使其63从第一行开始,然后在其下方的每一行中从左向右移动。因此,顶部的单元格是0,而右下角的单元格是63。 每个单元都有三个边界。我们可以在表格a,b中标记每个边框,其中a和b是共享该边框的单元格的编号。例如,单元格0和之间的边界2将被称为0,2或2,0(将它们置于哪个顺序都没有关系)。 网格最边缘的边框的标记系统是不同的,因为网格边缘的单元格具有不与其他单元格共享的边界。如果边框只是一个单元格的一部分,我们将使用字母X。例如,小区的三个边框0是0,2,0,X和0,X。 一些细胞含有鹅。但是,如果您不保护它们,这些鹅将会被邪恶的狐狸杀死(来自网格外部)。如果所有的鹅都死了,那么BrainSteel会很难过。因此,我们将编写一个程序在鹅周围建起篱笆,以保护它们免受狐狸侵害。鹅应该存在于单个完全封闭的栅栏多边形中。我们的围栏预算很低,因此请使用尽可能少的围栏。 输入说明 从0到的逗号分隔的数字列表63,代表包含鹅的细胞。例: 6,12 输出说明 为了成功保护鹅,需要在其上建立围栏的边界列表。这应该是最小数量的围栏。例: 5,6 6,7 11,12 12,13

3
四色定理
在四色定理的国家不超过四种颜色需要颜色的地图的区域。 挑战 给定一个州边界列表,为每个州ID分配一种颜色,以便没有两个相邻州具有相同的颜色。输出应为CSS样式表,将颜色分配给该州的2个字母的ID代码。这是可以应用于样式表的SVG映射。http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg 规则 最短代码胜出 可以使用任何州边界列表 只能使用4种颜色。 状态列表可以硬编码 建议:使用CSS fill:属性更改颜色,例如#AL{fill:green} 这是国家边界的清单 AL-FL AL-GA AL-MS AL-TN AR-LA AR-MO AR-MS AR-OK AR-TN AR-TX AZ-CA AZ-CO AZ-NM AZ-NV AZ-UT CA-NV CA-OR CO-KS CO-NE CO-NM CO-OK CO-UT CO-WY CT-MA CT-NY CT-RI DC-MD DC-VA DE-MD DE-NJ DE-PA FL-GA GA-NC GA-SC GA-TN IA-MN IA-MO IA-NE IA-SD …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.