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部分的代码,可以遍历图检验是否存图成功

可根据下图理解代码

全部评论

相关推荐

04-23 06:31
火炉中学 Java
点赞 评论 收藏
分享
岗位:服务端研发岗,客户端研发岗,算法岗,数据分析岗等都有。工作环境:公司位于上海市长宁区金虹桥国际中心,技术岗标配台式机和人体工学椅。薪资福利:pdd的薪资福利比较有竞争力,包一日三餐,每日都有水果,饮料无限供应。关于本次内推的相关问题:1、是什么部门:实习生具体去哪个部分,要看公司统一安排2、转正概率:往年的实习生转正概率都比较高的3、语言:pdd这边的技术栈以java为主,不过语言其实无所谓,都是相通的,随便什么语言,大部分同学跟着做几个需求就都熟悉了,所以学习能力比掌握的语言更重要,每位实习的同学都会安排一位大牛技术导师4、技术挑战:大互联网公司技术挑战是比较高的,百万qps,并发啥的,都有,肯定能学到东西的5、城市:只有上海这边,深圳北京暂无6、内推截止时间:6月13号7、笔试:投递后,耐心等待,简历比较多,HR需要时间处理,如简历筛选通过后,会安排笔试的。8、面试形式:笔试同过后安排面试,无特殊情况的话,一般是远程面试,我们有在线面试系统,不需要到现场面试。9、实习时间:确保可以连续2个月来实习,暑期7月和8月在岗。10、说明一下:仅26届还有问题的话,可私信我(需要的话,可私信加我vx)或者评论留言。内推链接:https://careers.pddglobalhr.com/campus/intern/detail?t=pfrhqqKzi8
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务