程序的输入是图中的边集.例如,考虑以下简单有向图:
a -> b -> c
Run Code Online (Sandbox Code Playgroud)
该图的边集是
{ (b, c), (a, b) }
Run Code Online (Sandbox Code Playgroud)
因此,将有向图作为一组边,如何确定有向图是否为树?如果它是树,那么树的根节点是什么?
首先,我在看你如何表示这个图,邻接列表/邻接矩阵/其他什么?如何利用您选择的表示来有效地回答上述问题?
编辑1:
有些人正在考虑使用DFS进行循环检测,但问题是从哪个节点启动DFS.由于它是有向图,我们无法从随机节点启动DFS,例如,如果我从顶点'c'开始DFS,它将不会继续进行,因为没有后边缘去任何其他节点.这里的后续问题应该是如何确定这棵树的根源.
我试图通过转换我在java中编写的一些程序来学习C++.一种是加密程序,它接受文本输入并使其看起来像DNA(AGCTGTGCT ...).我可以使用256个密码子(每个4个碱基)加密64个字符.("A"="TGGC","B"="ATGC"...)在java中,我创建一个hashmap<String, String[]>键,其中键是要加密的字符,值是4个字符串的数组,其中每个字符串是一个随机选择的密码子替换加密的字符.
在C++中,我试图使用一个地图来做同样的事情,但它给出了一个我不明白的错误.这是我尝试制作密码子表的代码:
// iterate through the characters and select 4 codons from the list
for(int i = 0; i < 64; i++){
codonTable[charList[i]][0] = originalCodonList[4 * i];
codonTable[charList[i]][1] = originalCodonList[4 * i + 1];
codonTable[charList[i]][2] = originalCodonList[4 * i + 2];
codonTable[charList[i]][3] = originalCodonList[4 * i + 3];
}
}
Run Code Online (Sandbox Code Playgroud)
charList是包含64个可编码字符的数组(它们实际上是字符串),originalCodonList是一个包含256个密码子的字符串数组.我已经尝试了几种方法将4个密码子分配给地图中的字符串数组,但似乎没有任何效果.这会产生最少的错误垃圾邮件.这是我编译时的输出:
在/usr/include/c++/4.6/map:61:0中包含的文件中,来自Genencrypt.cpp:4:/usr/include/c++/4.6/bits/stl_map.h:在成员函数'std :: map <中_Key,_Tp,_Compare,> _Alloc> :: mapped_type&std :: map <_Key,_Tp,_Compare,_Alloc> :: operator [](const key_type&)> [with _Key = std :: basic_string,_Tp = std …
我尝试了/ Qvec-report:2选项来查看MSVC自动矢量化器是否有用.不幸的是,我没有得到任何结果,积极或消极:
> Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x86
1> Copyright (C) Microsoft Corporation. All rights reserved.
1>
1> cl /c /Zi /nologo- /W3 /WX- /O2 /Ob2 /Oi /Oy /GL /D WIN32 /D _SCL_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_WARNINGS /D NDEBUG /D _LIB /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /arch:SSE2 /fp:fast /Zc:wchar_t /Zc:forScope /Yu"stdafx.h" /Fp"Release\(redacted).pch" /Fo"Release\\" /Fd"Release\vc110.pdb" /Gd /TP /analyze- /errorReport:prompt /Qvec-report:2 (redacted).cpp
1>cl : Command line warning D9035: option 'nologo-' has been deprecated and will be …Run Code Online (Sandbox Code Playgroud) 如果我不小心更改了头文件,保存它,然后将其更改回来并重新保存,如何阻止cmake检测到更改并重建其所有依赖项.通常我甚至不知道它在我重新运行之后才被修改make并开始重建过程.
我尝试了一些天真的手动时间戳更改,但没有运气.
要清楚,我正在寻找一个能够解释cmake使用规则的黑客或者某人.使用命令行gcc/clang,环境是linux/os x.
在现场C++编码访谈期间询问了这个问题.在那次采访中我没有提供一个好的答案.所以我希望在堆栈溢出时得到人们的反馈和建议.现在我已经有更多的时间来提出解决方案了,我相信我写了一个不错的解决方案.我认为这可以正常工作a并b引用不同的整数.如果a并且b引用相同的整数,那么该整数将被破坏为0.
void SwapRightMostNBits(int& a, int& b, unsigned int n){
if (n>31) { n=31; }
int mask=static_cast<int>(pow(2,n)-1);
a ^= (b & mask);
b ^= (a & mask);
a ^= (b & mask);
}
Run Code Online (Sandbox Code Playgroud) 我一直在审查一些看起来像这样的代码:
class A; // defined somewhere else, has both default constructor and A(int _int) defined
class B
{
public:
B(); // empty
A a;
};
int main()
{
B* b;
b = new B();
b->a(myInt); // here, calling the A(int _int) constructor,
//but default constructor should already have been called
}
Run Code Online (Sandbox Code Playgroud)
这有用吗?在调用默认值后调用特定的构造函数?
如果我有以下内容:
typedef struct _MY_STRUCT
{
int a;
float b;
} MY_STRUCT, *PMYSTRUCT
Run Code Online (Sandbox Code Playgroud)
怎么*PMYSTRUCT办?它现在是我需要声明的指针类型还是只能指向_MY_STRUCT我可以使用的指针?
我知道这MY_STRUCT是一种需要按如下方式使用的新类型:
MY_STRUCT str;
str.a = 2;
Run Code Online (Sandbox Code Playgroud)
那怎么样*PMYSTRUCT?
一般想知道是否有多个版本的Visual Studio 2010下载,即我只能找到x86并且不确定这是否是我想要的Win7 x64版本[我正在运行]
是否有多个版本可用,或者只是安装x64组件的唯一版本x86?
假设我有两个.h文件:啊和Bh此外,啊包括Bh本身:
Bh - 定义了B类.
class B {
...
};
Run Code Online (Sandbox Code Playgroud)
啊 - 定义了A类,它使用了B类.
#include B.h
class A {
void SomeFunction(const B& b);
};
Run Code Online (Sandbox Code Playgroud)
现在,我有一些.cpp文件,它同时使用A和B类(B类不仅可以用在A :: SomeFunction(B)中)
从设计模式和编码风格的角度来看,包含Ah和Bh(而不仅仅是Ah)的优点是什么?
我的系统在构建boost库时遇到了问题.据我所知,大多数boost库(幸运的是)只是不需要构建的头文件(有一些例外).是否需要构建boost :: signals2库?boost.signals2库是否依赖于boost.signals库?