我正在使用Data.Graph Graph来模拟Haskell中的模拟.模拟仅限于我的图形模型的2D网格.下面网格上每个点的节点将包含一个可能的分子类型,因此可能存在分子或只有Nothing.
1 - 2 - 3
| | |
4 - 5 - 6
| | |
7 - 8 - 9
Run Code Online (Sandbox Code Playgroud)
我已经建立了这种表示,但是当谈到更新分子的位置时,我觉得我已经走了很长一段路.到目前为止我所做的是将所有节点剥离到节点列表中.我写了一个函数来交换这个节点列表中的两个项目.但是现在当我把所有东西拉回到一起时,我遇到了问题,因为要生成一个新图形,我需要一个顶点列表,我可以从顶点Graph函数中轻松获得这些顶点.但是我还需要用边缘接触的顶点列表来压缩它.不幸的是,Data.Graph的边缘Graph函数返回一个Edge类型的元组列表,尽管我可以编写一个函数来派生有一个顶点边缘的列表顶点,但这对于生成一个图形并不是很有帮助.这样做似乎足以让我想知道我是否错过了重点是那里有一个Graph函数,它只是采用图形并返回带有更新节点的图形?
我有一个按钮"addCashier",它正在创建一个名为"Cashier"的线程,现在这个线程只是每4秒生成一次订单,在线程的run()方法中有一个while(true)循环.一切都很好,但现在我想添加一个按钮来模拟收银员注销.我在我的while循环onDuty和一个公共函数logOff()中添加了一个布尔变量,它将onTuty bool设置为false以使我退出运行的while循环.我现在的问题是来自我的gui类如何在特定线程上调用函数?每个收银员线程都是在运行时生成的,所以我不知道他们的名字.
我希望我有道理.提前致谢.
在我的程序中,我有Vertex的Edges和Faces的类,我希望它可以用来模拟形状.在此之前,我的Edge类包含了我的"vertex.h"文件,而我的Face类包含了我的Edge.h文件.在Face类中,我声明了一些边类型变量,在Edge类中,我声明了一些vertex类型的变量.一切正常.我的问题是在我的实现过程中,我意识到我希望边缘能够意识到它们连接在一起的面孔,并且我希望将它存储在边缘内.我想声明一个Face类型的指针,并在类的构造函数中使用:
Face * joiningFaces = new joiningFaces[2];
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到的语法错误表明Face不是一个类型,即使我在Edge.h中包含了Face.h.
是否存在某种层次结构系统阻止我将Face in Face和Edge in Edge包括在内?或者我做了一些愚蠢的事情?
===代码====
=== edge.h ===
#ifndef EDGE_H_
#define EDGE_H_
#include "Vertex.h"
#include "Face.h"
class Edge {
private:
Vertex a;
Vertex b;
Face * joinsFace;
public:
Edge();
Edge(Vertex newa, Vertex newb);
...ect
};
Run Code Online (Sandbox Code Playgroud)
=== Face.h ===
#ifndef FACE_H_
#define FACE_H_
#include "Edge.h"
class Face {
private:
Edge a;
Edge b;
Edge c;
public:
Face();
Face(Edge newA, Edge newB, Edge newC);
virtual ~Face();
Edge getEdgeA();
Edge getEdgeB();
Edge getEdgeC();
}; …Run Code Online (Sandbox Code Playgroud)