链式前向星

性质

一种邻接表的写法
在这里插入图片描述

关键点:

  • 数据结构

    // 边
    class Edge {int next; // 指向相同起始点的下一条边int to; // 邻接点int w; // 权重
    }
    Edge[] edge = new Edge[9];
    // edge[cnt]表示编号为cnt的边// 用数组表示
    int[] next = new int[MAX];
    int[] to = new int[MAX];
    int[] w = new int[MAX];
    // 即next[j]表示与编号为j的边的起始点相同的下一条边
    //   to[j]表示编号为j的边的邻接点
    //   w[j]表示编号为j的边的权重//存放每个起始点的边头指针
    int[] head = new int[MAX]; 
    // 即head[i]表示以i为起点的第一条边的序号
    
  • 加边操作

    addEdge(int from , int to, int w){// cnt为边的序号edge[cnt].to = to;edge[cnt].w = w;// 头插法edge[cnt].next = head[from];head[from] = cnt
    }
    
  • 遍历某一起始点的所有边

    int t = head[i]; // 假设不存在为-1
    while(t != -1){....t = edge[t].next
    }
    

附:用链式前向星求拓扑序列

import java.util.*;
import java.io.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static int MAXN = 200002;public static int MAXM = 200002;public static int[] head = new int[MAXN];public static int[] indegree = new int[MAXN];// 入度表public static int[] q = new int[MAXN];public static int h = 0; // 队列头public static int r = 0; // 队列尾// edgepublic static int[] next = new int[MAXM];public static int[] to = new int[MAXM];public static int cnt = 0; // 边的编号public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StringBuilder re = new StringBuilder();String str;// 满足即存在环String[] s = br.readLine().split(" ");int n = Integer.parseInt(s[0]);int m = Integer.parseInt(s[1]);int count = 0 ; // 记录出队的节点数Arrays.fill(head, 0, n + 1, -1);if (m > n * (n - 1) / 2 ) {System.out.println("-1");return;}// 存图while ((str = br.readLine()) != null) {String[] temp = str.split(" ");int from = Integer.parseInt(temp[0]);int to = Integer.parseInt(temp[1]);addEdge(from, to);indegree[to]++;}// 初始化入度表for (int i = 1 ; i < n + 1; i++) {if(indegree[i] == 0){q[r++] = i; }}while(h < r){int no = q[h++];count++;re.append(no + " ");updateIndegree(no);}if(count == n){System.out.println(re);}else{System.out.println("-1");}br.close();}public static void addEdge(int from, int t) {to[cnt] = t;next[cnt] = head[from];head[from] = cnt++;  }public static void updateIndegree(int node){int i = head[node];while(i != -1){indegree[to[i]]--;if( indegree[to[i]] == 0){q[r++] = (to[i]);}i = next[i];}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191595.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习Python实战】logistic回归

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习python实战 欢迎订阅&#xff01;后面的内容会越来越有意思~ ⭐内容说明&#xff1a;本专栏主要针对机器学习专栏的基础内容进行python的实现&#xff0c;部分…

算法-二叉树-简单-二叉树的遍历

记录一下算法题的学习6 首先我们要回忆一下怎么样遍历一个树&#xff1a; 三种遍历概念 先序遍历&#xff1a;先访问根节点&#xff0c;再访问左子树&#xff0c;最后访问右子树。 后序遍历&#xff1a;先左子树&#xff0c;再右子树&#xff0c;最后根节点。 中序遍历&…

DEEP-FRI: Sampling Outside the Box Improves Soundness论文学习笔记

1. 引言 前序博客有&#xff1a; DEEP FRI协议A summary on the FRI low degree test前2页导读RISC Zero的手撕STARKReed-Solomon Codes——RS纠错码Reed-Solomon Codes及其与RISC Zero zkVM的关系 Eli Ben-Sasson等人2019年论文《DEEP-FRI: Sampling Outside the Box Impro…

从键盘输入5个学生的信息(姓名、学号、成绩), 存入一个结构体数组中,计算平均分,并按成绩 高低排序并输出.

代码如下 #include<stdio.h> #include<string.h> #include<stdlib.h> /* 1.练习结构体数组排序   从键盘输入5个学生的信息&#xff08;姓名、学号、成绩&#xff09;,存入一个结构体数组中&#xff0c;计算平均分&#xff0c;并按成绩高低排序并输出. */…

harmonyOS鸿蒙开发工具下载安装以及使用流程

注册账号 进入鸿蒙官方网站&#xff1a;https://www.harmonyos.com/ 推荐使用手机号注册 进行实名认证 下载开发环境 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 下载开发工具 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装 无脑下一…

车载开发岗位如何?Android程序员是否转行

这几年的大环境让大家都过的不安逸&#xff1b;社会动荡与就业问题一直困扰了不少人。在大家都认为的高薪工作程序员行业中&#xff0c;现在也是费力不讨好裁员风潮大部分指向互联网。 我们Android开发基本上已经感受很久了&#xff0c;就这就业问题很难存活。对此我们的目光都…

【MySQL学习笔记-001】- 创建表、插入数据、查看数据库结构

创建employees表 当创建一个表时&#xff0c;需要指定表的名称和每个列的名称和数据类型。以下是一个示例SQL语句&#xff0c;用于创建一个名为"employees"的表&#xff0c;其中包含员工ID、姓名、职位和工资等列&#xff1a; CREATE TABLE employees (employee_id…

AI Navigation导航系统_unity基础开发教程

AI Navigation导航系统 安装插件烘焙导航系统障碍物创建人物的AI导航动态障碍物 在unity编辑器中&#xff0c;有一个灰常好用的插件&#xff1a;Navigation。有了它1&#xff0c;你就可以实现人物自动走到你鼠标点击的位置&#xff0c;而且还会自动避开障碍物&#xff0c;下面就…

java源码-工程讲解

1、 工程目录 源码工程目录讲解部分&#xff0c;讲解过程会让大家对后端源码工程有一个大致的了解&#xff0c;能让大家在此改造&#xff0c;就可以衍生出一些新的功能&#xff0c;需要对java技术深入了解&#xff0c;需要看后续java技术讲解部分 整个架构是一个spring-boot…

Canal+Kafka实现MySQL与Redis数据同步(一)

CanalKafka实现MySQL与Redis数据同步&#xff08;一&#xff09; 前言 在很多业务情况下&#xff0c;我们都会在系统中加入redis缓存做查询优化。 如果数据库数据发生更新&#xff0c;这时候就需要在业务代码中写一段同步更新redis的代码。 这种数据同步的代码跟业务代码糅合…

QUIC协议详解

前言协议特点QUIC协议与HTTP/2协议区别QUIC协议的多路复用技术优势QUIC协议在Java中的应用存在的问题 前言 QUIC&#xff08;Quick UDP Internet Connections&#xff09;是一种基于 UDP 的传输层协议&#xff0c;由 Google 提出。从协议栈可以看出&#xff0c;QUIC HTTP/2 …

最常用的结构体初始化方式

结构体最常用的初始化方式就是用memset把这块区域清0 注意不能这么写 STU stu[5]; stu (STU*)malloc(sizeof(stu)); 数组名不允许被赋值&#xff0c;它只是个表达式