第五周作业 -- 有向图邻接表表示及反向图构造

第五周作业——有向图邻接表表示及反向图构造 1. 有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的 立即下载

本次代码实现有向图及其反向图的邻接表显示。采用方式:使用二位数组保存从文档读出的每行数据,并在读取时进行反向保存反向图的数据。由于不确定某个顶点所指向的子顶点的个数,因此采取了ArrayList<Integer>的方式保存指向顶点的值。为了能够按照数字的顺序输出,将ArrayList<Integer>保存的值转存为int数组,传入数组进行冒泡排序完成。


代码实现:

/**
 * 1.有向图的邻接表表示
 * 2.有向图的反转
 * @author pan 
 * @date 2014-4-8
 */

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class GraphReverse {
	
	/**
	 * @param args[0] 指定文件名,需指定文件类型
	 * @throws FileNotFoundException 
	 */
	public static void main(String... args) throws FileNotFoundException{
		
		//获取源文件中边边关系数目
		GraphReverse gr = new GraphReverse();
		final int count = gr.lineCout("txt/tinyDG.txt", 2);//args[0]
		
		//定义读取文件对象,读取顶点数(需要显示的邻接表行数)
		Scanner scan = new Scanner(new File("txt/tinyDG.txt"));//args[0]
		final int vertex = scan.nextInt();
		
		//定义二维数组,保存读取的顶点之间的连接关系
		int[][] lineData = new int[count][2];
		int[][] reverseLineData = new int[count][2];
		//跳过开始两行
		scan.nextLine();
		scan.nextLine();
		
		//二维数组,初始化二维数组,按源文件顺序保存顶点之间的连接关系
		int line = 0;
		while(scan.hasNextInt()){
			lineData[line][0] = scan.nextInt();
			lineData[line][1] = scan.nextInt();
			reverseLineData[line][1] = lineData[line][0];
			reverseLineData[line][0] = lineData[line][1];
			line++;
		}
		scan.close();
		
		//输出原图的邻接表
		String str = "1.有向图的邻接表如下:";
		System.err.println(str);
		outGraph(count, vertex, lineData);
		
		//输出反向图的邻接表
		str = "\n2.反向图的邻接表如下:";
		System.err.println(str);
		outGraph(count, vertex, reverseLineData);
	}

	/**
	 * @param count 顶点关系数目
	 * @param vertex 顶点个数
	 * @param lineData 顶点关系
	 */
	private static void outGraph(final int count, final int vertex,
			int[][] lineData) {
		
		//保存顶点指向的顶点数值
		List<Integer> list = new ArrayList<>();
		//判断顶点关系中第一个顶点的值是否与顶点输出序列值相同
		//若相同则输出该顶点指向的顶点值
		for(int n=0;n<vertex;n++){
			System.out.print(n+": ");
			for(int i=0;i<count;i++){
				if(n==lineData[i][0]){
					list.add(lineData[i][1]);//把指向的顶点数值放入list中
				}	
			}
			
			//定义一个等于已有list元素长度的数组
			int elementCount = list.size();
			int[] arraySort = new int[elementCount];
			for(int j=0;j<elementCount;j++){
				arraySort[j] = (int)list.get(j);
			}
			list.clear();
			//排序数组,以实现按数字顺序输出
			GraphReverse gr = new GraphReverse();
			arraySort = gr.sortArray(arraySort);
			for(int j=0;j<elementCount;j++){
				System.out.print(arraySort[j]+" ");
			}	
			System.out.println();
		}
	}
	
	/**
	 * @param filePath 源文件路径
	 * @param n 文件头忽略的行数
	 * @return 返回顶点的边边关系数目
	 */
	public int lineCout(String filePath,int n) throws FileNotFoundException{
		int count=0;
		Scanner scanTxt = new Scanner(new File(filePath));
		while(scanTxt.hasNextLine()){
			//读取指针指向下一行
			scanTxt.nextLine();
			count++;
		}
		scanTxt.close();
		return count-n;
	}
	
	//传入数组进行冒泡排序
	public int[] sortArray(int[] array){
		for(int i=1,n=array.length;i<n;i++)
			for(int j=0;j<n-i;j++){
				if(array[j]>array[j+1]){
					int t = array[j];
					array[j] = array[j+1];
					array[j+1] = t;
			}
		}
		return array;
	}
}


运行结果:


一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运 本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可 阅读详情

相关推荐

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 774

有向图、及其反向图

二、有向图 2.1 有向图的定义及相关术语 定义: 有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的边都连着一对有序的顶点。 出度: 由某个顶点指出的边的个数称为该顶点的出度。 入度: 指向某个顶点的边的个数称为该顶点的入度。 有向路径: 由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。 有向环: 一条至少含有一条边,且起点和终点相同的有向路径。 一副有向图中两个顶点v和w可能存在一下四种关系: 没有边相连。 存在从v->w的边。 存在从

一名小白的博客 3729

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键arduino程序首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数:setup()函数。

DOF526570的博客 1万+

第五周作业——有向图邻接表表示及反向图构造(GraphReverse)

有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的邻接表表示。类名:GraphReverse。

当你的才华还撑不起你的野心时,那你就应该静下心来学习。 2514

【讯飞星火大模型AI】SpringBoot整合星火API:从零构建智能数据分析助手

本文详细介绍了如何使用SpringBoot框架整合讯飞星火大模型API,从零构建一个智能数据分析助手。通过清晰的步骤,指导开发者完成API密钥申请、项目搭建、SDK集成与核心代码编写,实现用户通过自然语言指令和CSV数据,即可自动获得ECharts图表代码与专业数据分析结论,极大降低数据分析与可视化的门槛。

neovim7hacker的博客 275

Linux CentOS7文件系统(/dev/var)的容量扩充

原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。

JHoanna的博客 3226

数据结构——【图的进阶】

目录 有向图 有向图API设计 有向图的实现 拓扑排序 拓扑排序 检测有向图中的环 基于深度优先的顶点排序 拓扑排序实现 有向图 有向图的定义及相关术语定义∶ 有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的边都连着 一对有序的顶点。出度∶ 由某个顶点指出的边的个数称为该顶点的出度。 入度: 指向某个顶点的边的个数称为该顶点的入度。 有向路径︰ 由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。有向环∶ —条至少含有一条边,.

龍弟-idea的博客 1411

C# CAD2016 多边形顶点按方向重新排序

这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。

转眼之间 一路有你 1356

第五周作业—有向图邻接表表示及反向图构造

1. 有向图中反向图构造。对tinyDG.txt(http://pan.baidu.com/s/1o6jWtcA)文件所表示的图,输出其邻接表表示 与 反向图的邻接表表示。类名:GraphReverse。 import java.io.BufferedReader;   import java.io.File;   import java.io.FileReader;  

u013995202的专栏 584

HFSS仿真的后处理结果,如何根据天线表面的电流密度分布对天线进行优化?

在HFSS仿真中,天线表面的Jsurf​是最直观、最有价值的诊断工具之一。它不仅告诉你天线“能不能工作”,还能告诉你“为什么工作”以及“哪里出了问题”。

degogmy的博客 1160

国家自然基金回避专家有必要填写吗?被回避专家能看到吗?

不填也能中填1–2个最保险只填1个最直接竞争者。✅一句话结论可以不填,但建议填1–2个被回避专家绝对看不到如果你愿意,我可以再告诉你一个很多人不知道的国家自然基金“评审分组规则”——它其实决定了你的项目最可能送到哪些专家手里,这对地区基金中标率影响很大。

qq_15963745的博客 157
上一篇: Java -- String类substring方法
下一篇: 第六周作业1 -- 利用哈夫曼编码英文字母表
MisterPan
博客等级 码龄14年 9粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值