在城市犯下的罪行和犯罪嫌疑人开始逃跑.给出了城市地图.目前,某些地方有一些警车,他们试图阻止嫌犯.警察的汽车和嫌疑人的最高速度相同.如果嫌疑人比任何一辆警车更早到达,嫌疑人只能通过一个点.地图中有几个出口,如果他到达任何一个,嫌疑人就会逃避.找到一个分配警车的算法,这样嫌疑人就无法逃避.
例如,下面是一个可能的城市地图.

白色圆圈是嫌疑人开始的地方,黑色圆圈是警车,小方块是出口.在这种情况下,可以阻止嫌疑人.一个可能的计划是警车A前往A',B停留和C前往C'.
我的问题的等效描述可能是:
一个化学工厂(用白色圆圈标记)爆炸,有毒液体开始以各种可能的方向高速流动,
v救援队(标有黑圈)的最高速度也v试图阻挡它.小广场是他们正在保护的村民.
我的想法
如果我们有n警车,一种非常低效的方法是列出所有可能的 - k元素P顶点子集,这样:
a)k <= n;
b)删除
P地图中的所有顶点将导致任何出口无法到达嫌疑人;c)删除任何适当的子集,
P让至少一个出口可以到达嫌疑人.
然后我们可以很容易地确定P警察是否可以在不迟于嫌疑人的情况下覆盖每个顶点.
但是如何列出所有可能的Ps?
@Lior Kogan:
看看这张地图:

如果这是一个双方都知道其他战略的转身游戏,那么警察就会赢,因为他可以保护嫌犯所在的一方.
但在我的问题上,警察输了,因为他永远不知道嫌犯可能选择哪一方.
通常我发现自己需要在Haskell 中跳过迭代的其余部分(比如continue在C中):
forM_ [1..100] $ \ i ->
a <- doSomeIO
when (not $ isValid1 a) <skip_rest_of_the_iteration>
b <- doSomeOtherIO a
when (not $ isValid2 b) <skip_rest_of_the_iteration>
...
Run Code Online (Sandbox Code Playgroud)
但是,我没有找到一个简单的方法.我所知道的唯一方法可能是Trans.Maybe,但是有必要使用monad变换来实现如此微不足道的东西吗?
在图论中,我们使用匈牙利算法来计算加权二分图的最小边缘覆盖(一组入射到每个顶点的边,即总重量最小的边).
我发现在Mathematica的新版本8中,图形理论有一个全新的函数包,(以Graph []开头.)但是我没有找到任何能完成这项工作的函数.我找到了一个名为FindEdgeCover []的函数,它只能找到边缘覆盖,而不是最小覆盖.
在Mathematica中,Max[]获取数字列表中的最大数字是最有效的函数,但是如何在列表列表中找到具有最大最后一个元素的列表?例如,x在一系列坐标中具有最大部分的2-d 坐标.
我最好的尝试是SortBy,但显然我不需要程序来排序我的列表,只需要我需要的最大值.
我刚刚开始学习长期听到的python语言.我之前一直在和C合作.我发现python,因为现代脚本语言在各种任务上都非常简洁.
所以我想知道,如果我有一个列表foo = [1, 2, 3, 4, 5],我想从中挑出所有奇数bar.在C中,我可能会使用循环并检查每个数字foo并复制所需的元素bar.你们这些"蟒蛇式"的做法是什么?
最近我在Haskell中编写了很多脚本.这是一次非常愉快的体验,因为它是我曾经触及过的最简洁的语言之一.
但是,困扰我的一件事是,我必须为import我编写的每个脚本键入相同的s,并且我几乎每次都使用一组模块,例如
import Control.Monad as MO
import Data.ByteString.Lazy as BS
import Data.Char as CH
import Data.Csv as C
import Data.Csv.Streaming as CS
import Data.Foldable as FOLD
import Data.Functor as F
import Data.List as L
import Data.List.Split as LS
import Data.Text.Lazy as T
import Data.Text.Lazy.IO as TI
import Data.Vector as V
import Debug.Trace as TR
import Prelude as P
Run Code Online (Sandbox Code Playgroud)
我的意思是我每次都可以复制和粘贴它们,但有没有办法可以隐藏这些繁琐的进口?就像Prelude隐含进口一样?
这是包Effect的官方教程中提供的图表pipes.
type Effect = Proxy X () () X
Upstream | Downstream
+---------+
| |
X <== <== ()
| |
() ==> ==> X
| | |
+----|----+
v
r
Run Code Online (Sandbox Code Playgroud)
由于Effect没有任何数据流,我期待它只是Proxy X X X X,密封所有流量.但相反,它允许两个流入.这有什么特别的原因吗?如果我只是Effect通过签名来编写通常所做的事情Proxy X X X X,它可以完美地传递编译器:
myMonad :: Proxy X X X X IO ()
myMonad = do
a <- lift $ getLine
lift $ print a
return ()
Run Code Online (Sandbox Code Playgroud)
为什么我们不能run这样呢?
假设我有一个名为 的表list,其中有item这样的 s (ids 是随机 uuid):
id rank text
--- ----- -----
x 0 Hello
x 1 World
x 2 Foo
x 3 Bar
x 4 Baz
Run Code Online (Sandbox Code Playgroud)
rank我想维护列始终从 到0的属性(n-1即n行数)——如果客户端请求insert带有 的项目rank = 3,那么 pg 服务器应分别将当前的3和推送到4和:45
id rank text
--- ----- -----
x 0 Hello
x 1 World
x 2 Foo
x 3 New Item!
x 4 Bar
x …Run Code Online (Sandbox Code Playgroud) 这是一个简单的opengl程序.在绘制三角形之前,我正试图清除屏幕.我在我的init()函数中调用了glClear(),但它似乎无法清除屏幕.
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void myIdleFunc()
{
glBegin(GL_TRIANGLES);
{
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2f(0.0f, 1.0f);
glVertex2f(-1.0f, -1.0f);
glVertex2f(1.0f, -1.0f);
}
glEnd();
glFlush();
usleep(1000000);
}
void init()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutCreateWindow("Hello, World!");
init();
glutIdleFunc(myIdleFunc);
glutMainLoop();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这是一个屏幕截图,文本来自后面的gnome终端.

我正在编写一个使用freetype2作为文本渲染引擎的opengl程序.
使用它的LCD子像素渲染,我发现渲染结果中总是有一些噪声像素,为什么会发生这种情况?此外,虽然它的手册说LCD模式会产生宽度为3的倍数的缓冲区,我经常发现宽度为3n + 1或3n + 2,与之不一致face->glyph->bitmap->width.
