【邻接表】69 邻接表:构造有权图

2023-11-02

问题描述 :

目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。

内容:

(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)

(2)使用构造函数,构造一个有权图。

 

注意:DG(有向图), DN(有向网), UDG(无向图), UDN(无向网)

 

参考函数原型:

//构造函数构造一个有权图。6个参数的含义:图的类型、结点数、边数、结点集、边集、权集 

template<class TypeOfVer, class TypeOfEdge>

adjlist_graph<TypeOfVer, TypeOfEdge>::adjlist_graph( const string &kd, int vSize, int eSize, const TypeOfVer d[], int **e, const TypeOfEdge w[]);

 

图的邻接表模板类原型参考如下:

 

/* 边表的结点定义 */

 

template<class TypeOfEdge>

struct edgeNode

{

    int data;

    TypeOfEdge weight;

    edgeNode<TypeOfEdge> *next;

    edgeNode(const int &d, edgeNode<TypeOfEdge> *ptr = NULL) //构造函数,用于构造其他结点(无权图) 

    //函数参数表中的形参允许有默认值,但是带默认值的参数需要放后面

    {

        next = ptr;

        data = d;

    }

    edgeNode(const int &d, const TypeOfEdge &w, edgeNode<TypeOfEdge> *ptr = NULL) //构造函数,用于构造其他结点(带权图) 

    //函数参数表中的形参允许有默认值,但是带默认值的参数需要放后面

    {

        next = ptr;

        data = d;

        weight = w;

    }

    int getData(){ return data;}  //取得结点的序号(顶点集) 

    TypeOfEdge getWeight(){ return weight;}  //取得边集中对应边的权值 

    void SetLink( edgeNode<TypeOfEdge> *link ){ next = link; }  //修改结点的next域 

    void SetData( int value ){ data = value; }   //修改结点的序号(顶点集) 

    void SetWeight(TypeOfEdge value ){ weight = value; }   //修改边集中对应边的权值   

};

 

//图的邻接表类

template<class TypeOfVer, class TypeOfEdge>

struct verNode

{

    TypeOfVer ver;

    edgeNode<TypeOfEdge> *head;

    

    verNode(edgeNode<TypeOfEdge> *h = NULL){head = h;} 

    TypeOfVer getVer(){ return ver;}  //取得结点值(顶点集) 

    edgeNode<TypeOfEdge> *getHead(){ return head;}  //取得对应的边表的头指针 

    void setVer(TypeOfVer value){ ver = value;}  //设置结点值(顶点集) 

    void setHead(edgeNode<TypeOfEdge> *value){ head = value;}  //设置对应的边表的头指针

 

};

 

template <class TypeOfVer, class TypeOfEdge>

class adjlist_graph{

    private:

       int Vers;           //顶点数 

       int Edges;          //边数 

       verNode<TypeOfVer,TypeOfEdge> *verList;

       

       string GraphKind;     //图的种类标志 

       

       bool Delete_Edge( int u, int v ); 

       bool DFS(int u, int &num, int visited[]); //DFS遍历(递归部分)

 

    public:

       adjlist_graph( const string &kd, int vSize, const TypeOfVer d[]); //构造函数构造一个只有结点没有边的图。 

       adjlist_graph( const string &kd, int vSize, int eSize, const TypeOfVer d[], int **e); 构造函数构造一个无权图。5个参数的含义:图的类型、结点数、边数、结点集和边集 

       adjlist_graph( const string &kd, int vSize, int eSize, const TypeOfVer d[], int **e, const TypeOfEdge w[]); //构造函数构造一个有权图。

       bool GraphisEmpty() { return Vers == 0; }  //判断图空否

       string GetGraphKind(){ return GraphKind; }

       bool GetVer(int u, TypeOfVer &data); //取得G中指定顶点的值 

       int GetFirstAdjVex(int u, int &v); //返回G中指定顶点u的第一个邻接顶点的位序(顶点集)。若顶点在G中没有邻接顶点,则返回-1

       int GetNextAdjVex(int u, int v, int &w); //返回G中指定顶点u的下一个邻接顶点(相对于v)的位序(顶点集)。若顶点在G中没有邻接顶点,则返回false

       bool PutVer(int u, TypeOfVer data); //对G中指定顶点赋值 

       bool InsertVer(const TypeOfVer &data); //往G中添加一个顶点 

       int LocateVer(TypeOfVer data); //返回G中指定顶点的位置 

       bool ExistEdge(int u, int v);

       bool PrintVer();  //输出顶点集 

       bool PrintAdjList();  //输出邻接矩阵 

       int GetVerNum(){ return Vers;}    //取得当前顶点数 

       int GetEdgeNum(){ return Edges;}  //取得当前边数 

       bool Insert_Edge(int u, int v); //无权图插入一条边

       bool Insert_Edge(int u, int v, TypeOfEdge w); //有权图插入一条边

       bool DeleteVer(const TypeOfVer &data); //往G中删除一个顶点 

       bool DeleteEdge( int u, int v ); //删除边 (外壳:有向(删除1条边), 无向(删除2条边))

       void DFS_Traverse(int u); //DFS遍历(外壳部分)

       void BFS_Traverse(int u); //BFS遍历

       ~adjlist_graph(); //析构函数 

};

 

输入说明 :

第一行:图的类型

第二行:结点数

第三行:结点集

第四行:边数

第五行:边集

第六行:权集

 

输出说明 :

第一行:图的类型

第二行:顶点集

第三行:邻接表

 

输入范例 :

UDN
6
A B C D E F
6
0 1
0 2
1 3
2 3
3 4
3 5
20 30 40 50 70 80

输出范例 :

UDN
A B C D E F
A->2(30)->1(20)
B->3(40)->0(20)
C->3(50)->0(30)
D->5(80)->4(70)->2(50)->1(40)
E->3(70)
F->3(80)

解题代码: 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <sstream>
#include <stack>
#include <map>
#include <ctime>
#include <array>
#include <set>
#include <list>
using namespace std;
//边的定义
template<class TypeOfEdge>
struct Edge_pair 
{
	int point=0;
	TypeOfEdge length=0;
	//=================
};
//顶点的定义 
template<class TypeOfVer, class TypeOfEdge>
struct verNode
{
	TypeOfVer ver_data;
	list<Edge_pair<TypeOfEdge> > group;
	//构造函数,默认会讲头指针设为空.
	verNode() 
	{ 
		group.clear(); 
		ver_data = 0;
	}
	//取得结点值(顶点) 估计是为了安全吧???
	TypeOfVer getVer() 
	{ 
		return ver_data;
	}  
	//取得对应的边表
	list<Edge_pair<TypeOfEdge> > getHead()
	{ 
		return group; 
	}  
	//设置结点值(顶点集) 估计是为了安全吧???
	void setdata(TypeOfVer value) 
	{ 
		ver_data = value;
		return;
	}  
	//=====================================================

	void creat_Point(int new_point,TypeOfEdge new_length)
	{
		Edge_pair<TypeOfEdge> Next_p;
		Next_p.point = new_point;
		Next_p.length = new_length;
		group.insert(group.begin(),Next_p);
		return;
	}
	//删除指定位置顶点
	void del_Point(int n)
	{

		return;
	}
};

template <class TypeOfVer, class TypeOfEdge>//顶点元素类型,边权值类型
class adjlist_graph {
private:
	int Vers;//顶点数 
	int Edges;//边数 
	vector<verNode<TypeOfVer, TypeOfEdge> >ver;//顶点存储
	string GraphKind;//图的种类标志 
	bool have_dir = false, have_w = false;//图类型参数
	//======================================================================
	bool Delete_Edge(int u, int v)//删除一条边
	{
		return false;
	}
	bool DFS(int u, int& num, int visited[])//DFS遍历(递归部分)
	{
		return false;
	}

public:
	//一个空的构造函数
	adjlist_graph()
	{
		Edges = 0;
		Vers = 0;
	}
	//假的析构函数 
	~adjlist_graph()
	{
		;//你电脑内存就640K吗?
	}
	//判断图空否
	bool GraphisEmpty()
	{
		return Vers == 0;
	}
	//获取图的类型
	string GetGraphKind()
	{
		return GraphKind;
	}
	//取得当前顶点数 
	int GetVerNum()
	{
		return Vers;
	}
	//取得当前边数 
	int GetEdgeNum()
	{
		return Edges;
	}
	//自动建立临接表
	bool Auto_build(void)
	{
		//DG(有向图), DN(有向网), UDG(无向图), UDN(无向网)
		/*第一行:图的类型  DN UDN
		第二行:结点数
		第三行:结点集
		第四行:无边标记
		第五行:边数
		第六行:边集
		第七行:权集*/

		/*第一行:图的类型  DG UDG
		第二行:结点数
		第三行:结点集
		第四行:边数
		第五行:边集*/
		cin >> GraphKind;//图的类型 
		cin >> Vers;//结点数
		ver.resize(Vers);//开辟节点空间
		for (int i = 0; i < Vers; i++)//结点集
		{
			TypeOfVer now;
			cin >> now;
			ver[i].setdata(now);
		}
			

		cin >> Edges;//边数
		vector<int> x_p, y_p, w_p;
		for (int i = 0; i < Edges; i++)
		{
			int c_x, c_y;
			cin >> c_x >> c_y;
			x_p.push_back(c_x);
			y_p.push_back(c_y);
		}
		//图的类型识别

		if (GraphKind == "DG")//DG(有向图)
			have_dir = true, have_w = false;
		if (GraphKind == "DN")//DN(有向网)
			have_dir = true, have_w = true;
		if (GraphKind == "UDG")//UDG(无向图)
			have_dir = false, have_w = false;
		if (GraphKind == "UDN")//UDN(无向网)
			have_dir = false, have_w = true;

		if (have_w)
			for (int i = 0; i < Edges; i++)
			{
				int c_w;
				cin >> c_w;
				w_p.push_back(c_w);
			}


		for (int i = 0; i < Edges; i++)
		{
			if (have_dir)
				if (have_w)
					ver[x_p[i]].creat_Point(y_p[i], w_p[i]);
				else
					ver[x_p[i]].creat_Point(y_p[i], 0);
			else
				if (have_w)
					ver[x_p[i]].creat_Point(y_p[i], w_p[i]), ver[y_p[i]].creat_Point(x_p[i], w_p[i]);
				else
					ver[x_p[i]].creat_Point(y_p[i], 0), ver[y_p[i]].creat_Point(x_p[i], 0);
		}
		return 1;
	}
	//取得G顶点的组
	vector<TypeOfVer> GetVer(void)
	{
		vector<TypeOfVer> head_group;
		for (int i = 0; i < Vers; i++)
		{
			head_group.push_back(ver[i].getVer());
		}
		return head_group;
	}
	//输出邻接表 
	bool Print_photo()
	{
		int i;
		for (i = 0; i < Vers; i++)
		{
			cout << ver[i].getVer();
			if (ver[i].group.size() != 0)
				cout << "->";
			else
			{
				cout << endl;
				continue;
			}
			vector<Edge_pair<TypeOfEdge> > out_lis;
			out_lis.clear();
			for (auto j = ver[i].group.begin(); j != ver[i].group.end(); j++)
			{
				out_lis.push_back(*j);
			}
			int j;
			for (j = 0; j < out_lis.size() - 1; j++)
				if (have_w)
					cout << out_lis[j].point << "(" << out_lis[j].length << ")" << "->";
				else
					cout << out_lis[j].point << "->";
			if (have_w)
				cout << out_lis[j].point << "(" << out_lis[j].length << ")" << endl;
			else
				cout << out_lis[j].point << endl;
		}
		return 1;
	}
	/*+++++++++++====分割线====++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
	
	//返回G中指定顶点u的第一个邻接顶点的位序(顶点集)。若顶点在G中没有邻接顶点,则返回-1
	int GetFirstAdjVex(int u, int& v)
	{
		return 0;
	}
	//返回G中指定顶点u的下一个邻接顶点(相对于v)的位序(顶点集)。若顶点在G中没有邻接顶点,则返回false
	int GetNextAdjVex(int u, int v, int& w)
	{
		return 0;
	}
	//对G中指定顶点赋值 
	bool PutVer(int u, TypeOfVer data)
	{
		return false;
	}
	//往G中添加一个顶点 
	bool InsertVer(const TypeOfVer& data)
	{
		return true;
	}
	//返回G中指定顶点的位置 
	int LocateVer(TypeOfVer data)
	{
		return -1;
	}
	//存在边
	bool ExistEdge(int u, int v)
	{
		return 0;
	}
	
	//输出邻接矩阵 
	bool PrintAdjList()
	{
		return 1;
	}

	//无权图插入一条边
	bool Insert_Edge(int u, int v)
	{
		return false;
	}
	//有权图插入一条边
	bool Insert_Edge(int u, int v, TypeOfEdge w)
	{
		return false;
	}
	//往G中删除一个顶点 
	bool DeleteVer(const TypeOfVer& data)
	{
		return false;
	}
	//删除边 (外壳:有向(删除1条边), 无向(删除2条边))
	bool DeleteEdge(int u, int v)
	{
		return false;
	}
	//DFS遍历(外壳部分)
	void DFS_Traverse(int u)
	{
		return;
	}
	//BFS遍历
	void BFS_Traverse(int u)
	{
		return;
	}


};


int main()
{
	int i;
	adjlist_graph<char, int> a;
	a.Auto_build();
	cout << a.GetGraphKind() << endl;
	vector <char> ans;
	ans = a.GetVer();
	for (i = 0; i < ans.size() - 1; i++)
		cout << ans[i] << " ";
	cout << ans[i] << endl;
	a.Print_photo();
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【邻接表】69 邻接表:构造有权图 的相关文章

  • clickhouse集群安装

    环境介绍 准备四台服务器搭建clickhouse集群 创建两个分片 每个分片一个副本 在任意三台服务器上安装zookeeper 服务 clickhouse集群依赖zookeeper进行服务器之间的数据同步 192 168 1 1 ch1 t
  • 自学python?一般人我还是劝你算了吧

    自我介绍 本人其实属于一枚屌丝 在真正开始学python之前 其实也就是对电脑的认知只限于上个网 玩个office办公软件 废话不多说 我为啥说自学python 一般人我还是劝你算了吧 因为我就是那个不一般的人 基础真的很简单 是个人稍微认
  • Android RxJava:图文详解 变换操作符

    前言 Rxjava 由于其基于事件流的链式调用 逻辑简洁 使用简单的特点 深受各大 Android开发者的欢迎 Github截图 如果还不了解 RxJava 请看文章 Android 这是一篇 清晰 易懂的Rxjava 入门教程 RxJav
  • 黑莓手机时代落幕;阿里巴巴为 Linux 内核调度器提出新概念;清理 Linux 内核“依赖地狱”

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 开源大新闻 黑莓手机时代落幕 阿里
  • 解决异常报错java.sql.SQLException: Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestam

    今天在执行某个分页查询时 查询MySQL的结果集时遇到如下报错 java sql SQLException Value 0000 00 00 00 00 00 can not be represented as java sql Times
  • SpringBoot 集成PageHelper 分页组件

    第一步 添加依赖
  • 一文读懂如何使用starUML绘制类关系图

    正文 前言 接下来我们画一张比较完整的类图 类间关系有 继承 组合 聚合 依赖 关联 参照的图是 开始画图 如图所示先点击左边Toolbox 中的class 然后在中间白色画布上点击一下 这样就出来了一个类 我们会看到这个类右边有一大堆黑色
  • 嵌入式_Keil (MDK - ARM) 的调试步骤

    目录 1 编译 调试 2 复位 全速运行 3 单步调试 4 逐步调试 5 跳出调试 6 运行到光标处 7 跳转到暂停行 8 调试窗口 首先为什么需要在 MDK 中进行程序的调试呢 在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题
  • kylin随笔

    1 kylin中一个segment是hbase中的一张表 可以通过修改kylin配置来决定将hbase这张表分为几个regin 以此来提高查询的并发度 2 增量日期分区表的合并 每天一个cube构建一个segment 存入hbase一张表
  • 引导微信用户关注公众号(详细步骤加代码)

    实现效果 当用户进入公众号h5页面 弹窗提示 是否要关注公众号 点击关注 跳转到微信关注页面 流程 1 用户在微信公众号端进入h5页面时 前端从后端数据库获取到用户关注状态 2 如果用户未关注 弹窗提示 是否关注公众号 不关注则取消弹窗 关
  • unity--01 个人实践安装与搭建环境

    首先按照网络上的去访问http www unity3d com 但 查找资料 应该访问https unity cn unity分为个人免费版和企业商用收费版 不过我点击下载的时候 并没有发现网络上所说要选择 个人版 压根没这个选项 试试看吧
  • 计算机二级C语言笔记(持续更新)

    C语言二级 第一章 1 1 1 1 1 C程序 程序 连续执行的一条条指令集合 机器语言 由0和1代码够成的二级制指令 源程序 高级语言编写的程序 目标程序 由二级制代码表示的程序 可执行程序 可以直接在操作系统上运行的程序 源程序 c 编
  • Java API

    目录 1 API 1 1API概述 2 String类 2 1String类概述 2 2String类的特点 2 3 String是什么 可以做什么 2 4String是不可变字符串的原因 2 5String类的构造方法 2 6字符串的比较
  • GreenPlum on K8s

    https pgconf in files presentations 2019 01 0103 Greenplum for Kubernetes PGConf India 2019 pdf About the Greenplum Oper
  • React 函数组件中使用hooks中得useState

    useState让函数组件有state 状态 并进行数据的读写操作 1 import React useState from react 引入useState 在函数中使用 const count setCount useState 0 数
  • RabbitMQ 同样的操作一次成功一次失败

    RabbitMQ 是一个功能强大的消息队列系统 广泛应用于分布式系统中 然而 我遇到这样的情况 执行同样的操作 一次成功 一次失败 在本篇博文中 我将探讨这个问题的原因 并提供解决方法 我是在表导出的时候发现的这个问题 因为我的某个设置的值
  • 影像维修工程师专项技能培训

    最近遇到很多咨询的人员都在对医疗行业产生疑惑 新闻报道说很多医院 公司的领导都被查 这样会不会影响设备维修方面 对后期找工作等有没有影响 总不能学好了技术却没有发挥的余地 最近确实是国家整体在对医疗方面做整改 7月21日 国家卫生健康委会同
  • 可重入函数与不可重入函数介绍

    不可重入函数的定义 在实时系统的设计中 经常会出现多个任务调用同一个函数的情况 如果有一个函数不幸被设计成为这样 那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据 从而导致不可预料的后果 这样的函数是不安全的函数 也叫不可重入函

随机推荐

  • python collections.OrderedDict() 用法

    Python中的字典对象可以以 键 值 的方式存取数据 OrderedDict是它的一个子类 实现了对字典对象中元素的排序 注意 OrderedDict的 Key 会按照插入的顺序排列 不是Key本身排序 比如下面比较了两种方式的不同 im
  • 使用HBuilderX将vue或H5项目打包app

    好久没有搞过将vue项目打包成app了 这两天刚好项目需要将vue开发的H5项目打包成APP 那就简单记录一次呗 之前也写过一篇打包app 是将项目使用hbuilder打开 转为webapp什么的 就可以直接打包了 现在不一样了 现在使用H
  • wstring 未定义的标识符,include

    wstring str L abcd VS2010提示 wstring未定义的标识符 include
  • 消息队列 RocketMQ:(九)消息重试

    文章目录 消息队列 RocketMQ 一 概述 消息队列 RocketMQ 二 系统架构 消息队列 RocketMQ 三 发送普通消息 三种方式 消息队列 RocketMQ 四 顺序消息 消息队列 RocketMQ 五 延时消息 消息队列
  • 聚类算法应用场景实例十则

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 基于用户位置信息的商业选址 随着信息技术的快速发展 移动设备和移动互联网已经普及到千家万户 在用户使用移动网络时 会自然的留下用户的位置信息 随着近年来GIS地理信息技
  • vue3 webpack打包流程及安装 (1)

    npm run build 也可以打包 如果没有特殊需求 可以使用 效果其实是差不多的 webpack网址 起步 webpack 中文文档 docschina org 报错 跟着安装报错 后来查了才知道 是因为 webpack 版本有问题
  • 多相机坐标转换_使用KITTI数据集实现坐标转换

    本文的主要内容 是讨论如何将KITTI激光雷达的点云数据 映射到图像中去 KITTI数据集是怎么采集的 下面这幅图是车的俯视图 可以看到 用到了2个彩色相机 2个灰度相机 1个激光雷达 1个GPS IMU 图1 KITTI车俯视图 KITT
  • UiBot RPA:电商决胜双11的秘密武器

    近年来 中国网络零售市场规模持续扩大 数据显示 2019年前三季度 全国网上零售额73237亿元 同比增长16 8 其中 实物商品网上零售额57777亿元 增长20 5 占社会消费品零售总额比重的19 5 然而 在规模增长的同时 中国网购交
  • 关于图像处理中的卷积运算——sobel边缘检测

    一 卷积的概念以及计算 1 一维卷积 在泛函分析中 卷积是通过两个函数 f 和 g 生成第三个函数的数学运算 表征函数 f 和经过翻转 平移的g 的乘积函数围成的曲边梯形的面积 连续函数卷积 设 f x g x 是 R 上两个可积函数 作积
  • 查询和设置服务器最小最大内存

    exec sp configure show advanced option 1 reconfigure exec sp configure max server memory MB 显示服务器最大内存 exec sp configure
  • 2021年浙大考研计算机专业录取分数线,浙江大学2021年计算机考研拟录取数据分析...

    导语 中公浙江研招网提醒大家关注浙江专业解析 浙江大学2021年计算机考研拟录取数据分析 浙江大学计算机科学与技术399分的分数线堪称恐怖 这仅仅是进入复试的条件 复试录取比一般要求不低于1 2 1 也就是说 必然会有400分以上的高分考生
  • C++入门day07(通讯录)

    C 语句真的好长啊 Python确实更简洁 老师带着我们理解逻辑 所以用的是面条版 通讯录管理系统 系统需求 通讯录是一个可以记录亲人 好友信息的工具 系统中需要实现的功能如下 添加联系人 向通讯录中添加新人 信息包括 姓名 性别 年龄 联
  • feign.RetryableException:&& unknowhostException

    在使用springcloud的时候 服务的调用通过eureka来保存 通过feign来进行微服务的远程调用 在远程调用ribbon的时候 出现两种异常 一种是timeout异常 需要在配置中加上ribbon ReadTimeout 6000
  • windows10和win11设置暂停更新-时间任意设置

    windows10设置暂停更新时间任意设置 亲测有效 1 修改注册表 2 设置时间参数 2 1 设置路由 2 2 设置参数 2 3 设置后效果 1 修改注册表 找到Windows 管理工具 点击向下可找到注册表编辑器 点击打开 打开 运行
  • uni-app h5 uploadFile多文件/图片上传

    问题描述 在使用uni app开发h5时要实现多图片上传给后台 不使用循环 发现给后台的格式有误 后台取不到数据 需改变下传递的数据格式 uni chooseImage sourceType sourceType this sourceTy
  • idea新建一个Spring项目(最基础)

    首先 笼统介绍一下 什么是spring 1 Spring 的主要作用就是为代码 解耦 降低代码间的耦合度 根据功能的不同 可以将一个系统中的代码分为主业务逻辑与系统级业务逻辑两类 它们各自具有鲜明的特点 主业务代码间逻辑联系紧密 有具体的专
  • 【MAVEN】Maven依赖和项目代码分离打包,依赖包自动同步到服务器

    Maven分离lib打包 lib包自动同步 加速项目部署 目标 整体步骤 Maven配置 1 分离打包 配置打包 将依赖jar拷贝到外部 2 编辑MANIFEST MF 本地 lt gt 服务器lib快速同步 1 使用前提 2 实现同步 目
  • R语言 编写自定义函数

    自定义函数 R语言实际上是函数的集合 用户可以使用base stats等包中的基本函数 也可以编写自定义函数完成一定的功能 一个函数的结构大致如下所示 myfunction lt function arglist statements re
  • 网络数据保障ptop_网络影响未来十大预言

    2007年1月23日 CNNIC发布了第19次互联网报告 报告数据显示 中国的互联网正在很多方面发生改变 2007年这一趋势将变得更加明显 1 网络越来越实用 56 1 的用户上网经常收发邮件 上网看新闻第一次退居次席 估计不远的将来 写信
  • 【邻接表】69 邻接表:构造有权图

    问题描述 目的 使用C 模板设计并逐步完善图的邻接表抽象数据类型 ADT 内容 1 请参照图的邻接矩阵模板类原型 设计并逐步完善图的邻接表ADT 由于该环境目前仅支持单文件的编译 故将所有内容都集中在一个源文件内 在实际的设计中 推荐将抽象