图其一——邻接表的建立

构建有向无权图及有权图的C++实现

图论(一)

仍旧是乘着写作业的劲,赶出来的成果。(~ – ~)

所以注释不全,还请谅解。

以下代码可以构建一个有向无权图:

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 高考加油呀!学弟学妹们。(已经提前祝福了,期待相遇!)

今天就到这里吧,暑假将保持高频率更新,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值