图形指向和加权
Graph directed and weighted
我有一个加权的有向图,带有10个节点,该节点从节点 a 开始。节点相互连接(代码中显示了特定连接),边缘显示了转到下一个节点的概率(概率)。例如,如果节点 a 连接到节点 b 和 c ,并且两个都具有相同的概率,则可以达到(0.5)第一个节点应该在列表中获取,因此 b 。
,用户输入遍历功能应进行图形的次数。遍历函数的返回应为访问节点 e 的次数。
我已经做了一些,如果您可以帮助我并告诉我应该如何访问每个节点,并检查它是否是" e >"的节点,那将很棒。
#include <iosrteam>
#include <cstdlib>
#include <vector>
using namespace std;
struct node {
const char* label;
vector<float> prob;
vector<node*> succ;
};
// TODO: implement function traversal
void node_init(node* a, const char label[]) {
a->label = label;
}
void edge_init(node* a, node* b, float probability) {
a->succ.push_back(b);
a->prob.push_back(probability);
}
void init_graph(node* nodes) {
node_init(nodes, "a");
node_init(nodes+1, "b ");
node_init(nodes+2, "c ");
node_init(nodes+3, "d ");
node_init(nodes+4, "e ");
node_init(nodes+5, "f ");
node_init(nodes+6, "g ");
node_init(nodes+7, "h ");
node_init(nodes+8, "i ");
node_init(nodes+9, "j ");
edge_init(nodes, nodes+1, 0.5);
edge_init(nodes, nodes+2, 0.5);
edge_init(nodes+1, nodes+3, 0.3);
edge_init(nodes+1, nodes+4, 0.3);
edge_init(nodes+1, nodes+5, 0.4);
edge_init(nodes+2, nodes+4, 0.5);
edge_init(nodes+2, nodes+5, 0.5);
edge_init(nodes+3, nodes, 1.0);
edge_init(nodes+4, nodes+6, 0.5);
edge_init(nodes+4, nodes+7, 0.5);
edge_init(nodes+5, nodes+6, 0.25);
edge_init(nodes+5, nodes+7, 0.25);
edge_init(nodes+5, nodes+8, 0.25);
edge_init(nodes+5, nodes+9, 0.25);
edge_init(nodes+6, nodes, 1.0);
edge_init(nodes+7, nodes, 1.0);
edge_init(nodes+8, nodes, 1.0);
edge_init(nodes+9, nodes, 1.0);
}
int main(int argc, char *argv[]) {
if (argc > 1) {
srand(time(0));
node *nodes= new node[12];
init_graph(nodes);
int fische = traversal(nodes,atoi(argv[1]));
cout << endl << "Number of e-access: " << e << endl;
delete [] nodes;
} else {
cout << "Call with number of steps for traversal.n";
}
return 0;
}
这是我发现的,它似乎在起作用(我们的导师告诉我们将概率概括并将其与随机生成的数字进行比较,不要问我为什么为什么):
#include <iostream>
#include <cstdlib>
#include <vector>
#include <time.h>
using namespace std;
struct node {
const char* label;
vector<float> prob;
vector<node*> succ;
};
// TODO: implement function traversal
int traversal(node* start, int argv ){
int e=0;
int i=0;
cout<<start->label<<endl;
if(string(start->label).compare("e ") == 0){
e++;
}
if(argv>0) {
float summe =0;
double ran = (double)rand() / RAND_MAX;
for(int i=0; i<start->prob.size();i++){
summe = summe + start->prob[i];
if(summe>ran){
e =e + traversal(start->succ[i], argv-1);
break;
}
}
}
return e;
}
void node_init(node* a, const char label[]) {
a->label = label;
}
void edge_init(node* a, node* b, float probability) {
a->succ.push_back(b);
a->prob.push_back(probability);
}
void init_graph(node* nodes) {
node_init(nodes, "a ");
node_init(nodes+1, "b ");
node_init(nodes+2, "c ");
node_init(nodes+3, "d ");
node_init(nodes+4, "e ");
node_init(nodes+5, "f ");
node_init(nodes+6, "g ");
node_init(nodes+7, "h ");
node_init(nodes+8, "i ");
node_init(nodes+9, "j ");
edge_init(nodes, nodes+1, 0.5);
edge_init(nodes, nodes+2, 0.5);
edge_init(nodes+1, nodes+3, 0.3);
edge_init(nodes+1, nodes+4, 0.3);
edge_init(nodes+1, nodes+5, 0.4);
edge_init(nodes+2, nodes+4, 0.5);
edge_init(nodes+2, nodes+5, 0.5);
edge_init(nodes+3, nodes, 1.0);
edge_init(nodes+4, nodes+6, 0.5);
edge_init(nodes+4, nodes+7, 0.5);
edge_init(nodes+5, nodes+6, 0.25);
edge_init(nodes+5, nodes+7, 0.25);
edge_init(nodes+5, nodes+8, 0.25);
edge_init(nodes+5, nodes+9, 0.25);
edge_init(nodes+6, nodes, 1.0);
edge_init(nodes+7, nodes, 1.0);
edge_init(nodes+8, nodes, 1.0);
edge_init(nodes+9, nodes, 1.0);
}
int main(int argc, char *argv[]) {
if (argc > 1) {
srand(time(0));
node *nodes= new node[12];
init_graph(nodes);
int e = traversal(nodes,atoi(argv[1]));
cout << endl << "Number of e-access: " << e << endl;
delete [] nodes;
} else {
cout << "Call with number of steps for traversal.n";
}
return 0;
}
相关文章:
- C++图形类指针混淆
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 这是实现图形的坏方法吗
- 打印 ONNXRUNTIME::图形没有模型
- 提升如何在图形可视化中写入边缘的权重?
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- C++ 中的图形菜单
- 将图形属性与 std::unique_ptr 捆绑在一起
- 从流到邻接列表的向量读取图形
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 直接显示手动图形内存泄漏
- Directx 12 :在两个进程之间共享图形内存
- Microsoft C++ 用于图形 API 的 Rest SDK
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 图形初学者C++(跳过控制台)?
- 在 cpp 中最简单的图形实现
- 图形指向和加权