鱼C论坛

 找回密码
 立即注册
查看: 1351|回复: 1

这段代码nex的作用是什么

[复制链接]
发表于 2023-10-4 23:33:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
#include <cstring> 

using namespace std;

const int N = 7; // ͼÖнڵãÊýÄ¿
const int M = 100; // ͼÖбߵÄ×î´óÊýÁ¿

int h[N]; // ½ÚµãµÄÁÚ½ÓÁ´±íµÄÍ·Ö¸Õë
int e[M]; // ±ßµÄÖÕµã
int nex[M]; // ÿһÌõ±ßµÄÏÂÒ»Ìõ±ßµÄ±àºÅ
int idx = 0; // ±ßË÷Òý

void add(int a, int b) {
    e[idx] = b;
    nex[idx] = h[a];
    h[a] = idx;
    idx++;
}

int main() {
    memset(h, -1, sizeof(h)); // ³õʼ»¯ÁÚ½Ó±íΪ¿Õ

    // Ìí¼Ó±ß
    add(1, 2);
    add(1, 5);
    add(1, 3);
    add(2, 3);
    add(3, 4);
    add(4, 5);
    add(5, 1);
    
    cout << "ϱê: " ;
    for (int i=0;i<N;i++)
    {
            cout<< i << " ";
            
        }
        cout << endl;
    
    cout << "h:   " ;
    for (int i=0;i<N;i++)
    {
            cout<< h[i] << " ";
            
        }
        cout << endl;

    cout << "e:   " ;
    for (int i=0;i<N;i++)
    {
            cout<< e[i] << " ";
            
        }
        cout << endl;
        
        cout << "nex: "; 
    for (int i=0;i<N;i++)
    {
            cout<< nex[i] << " ";
            
        }
//    // ´òÓ¡ÁÚ½Ó±í
//    for (int i = 1; i <= N; i++) {
//        cout << "h[" << i << "] -> ";
//        for (int j = h[i]; j != -1; j = nex[j]) {
//            cout << e[j] << " -> ";
//        }
//        cout << endl;
//    }

    return 0;
}


h和e我基本明白了,但是nex还是不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-4 23:33:10 | 显示全部楼层
nex数组是链式前向星的一个重要组成部分,它的作用是记录每个节点的下一个节点在e数组中的下标。在add函数中,每次添加一条边时,会将该边的下一个节点设置为当前节点的头节点,也就是h数组中的值。而每次添加完边之后,idx会自增1,也就是说nex数组中的下一个空位就是idx。因此,nex数组的更新过程就是将新添加的边的下一个节点设置为当前节点的头节点,也就是nex[idx] = h[a]。这样,通过nex数组,我们就可以方便地遍历每个节点的所有邻居节点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表