- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个存储为邻接表的图。顶点属性保存一个int ID,边缘属性保存一个4x4矩阵和一个权重;
在测试用例中,该图是一个 3 顶点图,每对顶点都有一条边连接(一个完整的图)。
我有一个边描述符 vector PathType
,代表一条路径,我正在遍历它并访问每个边及其属性 RelationshipEdge
,如下所示。
for(PathType::iterator pathIterator = path.begin(); pathIterator != path.end(); ++pathIterator){
edge_t edge = *pathIterator;
RelationshipEdge rEdge = m_graph[edge];
int sourceID = m_graph[boost::source(edge, m_graph)].id;
int destID = m_graph[boost::target(edge, m_graph)].id;
但是有时执行此操作时,返回的 RelationshipEdge
包含错误边的数据。
例如,检查 edge
显示 m_source
为 1 和 m_target
为 2。如果我检查图形并找到边源 1 和目标 2,权重为 3,矩阵与输入的一样。但是 rEdge 的权重为 1,并且矩阵不同。这些值实际上对应于源 0 和目标 1 的边。
我是否正确访问了边缘属性?
我的图表类型的定义是:
typedef boost::adjacency_list<
boost::vecS, boost::vecS, boost::undirectedS, MarkerVertex, RelationshipEdge>
CorrelationAdjacencyList;
最佳答案
我相信您的错误来自代码库中的其他地方。
我将这个简单的代码放在一起来测试边缘访问和类似图形上的顺序,一切都按预期工作。
如 sehe 所述,可以手动维护 edge_descriptors
或 vertex_descriptors
罪魁祸首。或者您的路径 vector 初始化或构造。
#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_traits.hpp>
using namespace std;
enum edge_t {A,B};
struct MarkerVertex{
std::string id;
};
struct RelationshipEdge{
std::string id;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
MarkerVertex, RelationshipEdge> CorrelationAdjacencyList;
typedef boost::graph_traits<CorrelationAdjacencyList>::edge_descriptor Edge;
typedef boost::graph_traits<CorrelationAdjacencyList>::vertex_descriptor Vertex;
typedef vector<Edge> PathType;
void printPath(PathType &p, CorrelationAdjacencyList &g){
cout << "print path" << endl;
for(PathType::iterator pi = p.begin(); pi != p.end(); ++pi){
Edge e = *pi;
Vertex s = boost::source(e,g);
Vertex t = boost::target(e,g);
cout << g[s].id << "\t"
<< g[e].id << "\t"
<< g[t].id << endl;
bool isFound;
Edge eForward;
boost::tie(eForward,isFound) = boost::edge(s,t,g);
cout << "forward " << g[eForward].id << "\t" << isFound << endl;
Edge eBackward;
boost::tie(eBackward,isFound) = boost::edge(t,s,g);
cout << "backward " << g[eBackward].id << "\t" << isFound << endl;
}
}
int main(int argc, char* argv[]){
CorrelationAdjacencyList graph;
Vertex a = boost::add_vertex(graph); graph[a].id = "a";
Vertex b = boost::add_vertex(graph); graph[b].id = "b";
Vertex c = boost::add_vertex(graph); graph[c].id = "c";
Edge e1 = boost::add_edge(a,b,graph).first; graph[e1].id = "e1";
Edge e2 = boost::add_edge(b,c,graph).first; graph[e2].id = "e2";
Edge e3 = boost::add_edge(c,a,graph).first; graph[e3].id = "e3";
PathType path1,path2,path3;
path1.push_back(e1);
path1.push_back(e2);
path1.push_back(e3);
path2.push_back(e2);
path2.push_back(e3);
path2.push_back(e1);
path3.push_back(e3);
path3.push_back(e2);
path3.push_back(e1);
printPath(path1,graph);
cout << endl;
printPath(path2,graph);
cout << endl;
printPath(path3,graph);
cin.get();
}
关于c++ - BGL : adjacency list returns wrong edge property for descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323590/
我有一个用于查找存储设备序列号的内核驱动程序,但该驱动程序存在问题。Descriptor->SerialNumberOffset 为 103但是 (LPCSTR)(UINT_PTR)Descripto
在我的程序中,每当我用导致无法检测到 ORB 功能的东西覆盖相机时,程序就会崩溃并出现错误: OpenCV Error: Assertion failed (type == src2.type() &
定义 通常,一个 descriptor 是具有“绑定行为”的对象属性。所绑定行为可通过 descriptor 协议被自定义的 __get__() , __set__() 和 __delete__(
如 normaluser : $ ulimit -n 4096 -bash: ulimit: open files: cannot modify limit: Operation not permit
我正在尝试在elasticsearch中安装ik分析,ik源来自以下位置: GitHub 我的步骤来自自述文件和来自互联网的一些资料 cd elasticsearch-analysis-ik mvn
我有以下代码: int fds[2]; if (pipe(fds) < 0) { fprintf(stderr, "ERROR, unable to open pipe: %s\n", str
我在 C 中有一个简单的生产者消费者程序,尝试用 fork 解决它当生产者试图在管道上写入时,我得到了错误:我用相同的逻辑编写了另一个程序,但这个程序没有给我任何线索,让我知道为什么? 生产者无法在管
我很难理解 FREAK 描述符中的参数 orientationNormalized 和 scaleNormalized。知道它们的意思或作用吗? OpenCV FREAK 文档:http://docs
我在做的事情是否符合通用设计模式?如果有,名字是什么? 我有一个复杂对象,它具有“简单”字段,例如字符串和字符串列表,以及其他复杂对象。我想将此对象的实例添加到 JMS 消息队列中,这意味着它们需要是
在例子中: event.events = EPOLLIN; event.data.fd = fd; int ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, event
最近,我的 Crashlytics 和 Apple 崩溃日志收到了许多崩溃信息 -[CTTelephonyNetworkInfo updateRat:descriptor:]在没有太多其他信息的情况下
是否有可能将N个文件描述符作为一个文件描述符显示给程序,以便在N个文件描述符(即从N个套接字)中接收的数据将被转发回单个文件描述符上的调用API,从而隐藏它实际上可能来自不同的文件描述符的事实吗?是否
网络编程菜鸟在这里, 我对accept和connect套接字函数的行为感到困惑。在大多数编程语言中,这些函数的包装返回不同类型的值:accept返回可用于发送/接收数据的新描述符,但是connect不
我正在尝试启动resque-web,但是会发生此错误: [Sun Mar 06 05:27:48 +0000 2011]启动“resque-web” ... [Sun Mar 06 05:27:48
我有一个项目,其中有几个为程序集插件编写的自定义描述符。有没有办法一次只运行其中一个描述符而不是整个描述符?我尝试使用文档中的描述符开关 here ,传递到我想要运行的一个描述符的完整路径,但它正在运
我正在尝试学习 POSIX 中的基本 IO 函数,我编写了以下代码,但它不起作用,并且在我尝试执行代码时返回“Bad file descriptor”错误: #include #include #
编辑:最小、完整和可验证的示例位于下面的注释中,代码实际上有效,问题出在不同的区域。抱歉,发帖错误,我现在无法删除它。 我知道,已经有一些关于此的页面,但我确实尝试了所有方法,但没有任何效果。我一直遇
#define MAX 2 int main(){ int mutex = semget(ftok("/usr",'P'),1,IPC_CREAT|0666); int wrt = s
我正在尝试实现一个 simpel c shell,它将通过管道传输任意数量的命令。这是相关的 for 循环: int status; int i,j,inputFile,outputFile,pid;
简介 我典型的swig接口(interface)文件类似如下: %{ //COPY THIS BLOCK AS IS #include static CppClass* get_Cp
我是一名优秀的程序员,十分优秀!