Java代码--存图方式链式前向星
package template;
import java.util.*;
public class LianShiQianXiangXing {
//以有向带权图为例----那么让一条无向边更新两个head指向
static int n,m;
static boolean []flagg=new boolean[1005];
static int[]head=new int[1005];//以顶点i为起点的第一条边的下标
static class Edge{
int to;//边的终点值
int w;//权值
int nextt;//下一个同起点边下标的值
}
static Edge[]edges=new Edge[1000005];
public static void printt() {
//遍历图
for(int i=1;i<=n;i++) {//遍历起点
// if(flagg[i]==true)continue;
System.out.print(i+" ");
// flagg[i]=true;
for(int i0=head[i];i0!=-1;i0=edges[i0].nextt) {
//遍历边
// if(flagg[i0]==true)continue;
int too=edges[i0].to;
System.out.print(too+" ");
// flagg[too]=true;//标记
}
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
// 开始未读入边时,全部边下标初始化为-1
Arrays.fill(head, -1);
int s=0,e=0,w=0;
for(int i=1;i<=m;i++) {
edges[i]=new Edge();
s=sc.nextInt();
e=sc.nextInt();
w=sc.nextInt();
edges[i].to=e;
edges[i].w=w;
//接下来两步相当于头插法
edges[i].nextt=head[s];//以s为起点的下一条边的下标
head[s]=i;
}
printt();
}
}
该方法适用于有向图和无向图,另外对于图是否连通也无需考虑
介绍关键思路:和邻接表是类似的,都是需要找到以某个点为起点的所有边然后串起来
不过该方法适用的是数组,相当于静态链表
加上注释的flagg部分的代码,可以遍历图检验是否存图成功
可根据下图理解代码

