图论(一)
仍旧是乘着写作业的劲,赶出来的成果。(~ – ~)
所以注释不全,还请谅解。
以下代码可以构建一个有向无权图:
vector<vector<int>> adj;
int n;
cout << "你所构建的图有几个节点?" << endl;
cin >> n;
int* b = new int[n];
for (int i = 0; i <= n; i++) {
adj.push_back(vector<int>());
}
cout << "你所构建的图有几条边?" << endl;
int e = 0;
cin >> e;
memset(b, 0, n);
cout << "请依次按方向输入图的边:" << endl;
for (int i = 1; i <= e; i++) {
int m = 0, n1 = 0;
cin >> m;
cin >> n1;
adj[m].push_back(n1);
}
for (int i = 0; i <= n; i++) {
adj[i].push_back(0);
}
在使用过程中,切记加vector头文件!
随后补充一个小的知识点:memset(void* Dst,char val,int num)被定义在cstring头文件下!
有权图:
将int类型换成如下node类型:
struct node{
int to;
int v;
};
并在输入时注意区分to与v的输入,定义临时节点temp,将数据先传到变量temp.to和temp.v中,之后再将temp压入vector内即可,当然,最好在node内重载运算符,包括不限于">“,”<“,”=“,”<=“,”>=“,”+“,”-"等操作,以免使得加权后的深搜,广搜算法的形式与不加权的形式差异较大。
6.7 高考加油呀!学弟学妹们。(已经提前祝福了,期待相遇!)
今天就到这里吧,暑假将保持高频率更新,敬请期待!
构建有向无权图及有权图的C++实现
545

被折叠的 条评论
为什么被折叠?



