数据结构_课程设计——最小生成树:室内布线

2023-11-17

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************


这道课程设计,费不少时间,太麻烦了= =。(明明是能力不够




~~~~最小生成树:室内布线~~~~


题目要求:

装修新房子是一项颇为复杂的project,如今须要写个程序帮助房主设计室内电线的布局。

首先,墙壁上插座的位置是固定的。插座间须要有电线相连,并且要布置的整齐美观,即要求每条线都与至少一条墙边平行,且嵌入四壁或者地板(不能走屋顶)。

房主要求知道,要将全部插座连通,自己须要买的电线的最短长度。


另外,别忘了每一个房间都有门,电线不能够穿门而过。上图给出了一个有4插座的房间的电线布局。


输入要求:

输入由若干组測试数据组成。

每组数据的第1行包括房间的长、宽、高和插座的个数N(N为一个不超过20的正整数)。

接下去的N行中,第i行给出第i个插座的位置坐标(xi,yi,zi);最后一行包括4个3元组(x1,y1,z1)…(x4,y4,z4),各自是长方形门框的4个角三维坐标。4个数字所有为0表示所有測试结束,不要对该数据不论什么处理。

注意:这里如果长方体形状的房间全然位于三维直角坐标系的第一象限内,而且有一个角落在原点上。地板位于x-y平面。题目数据保证,每一个插座仅属于四面墙中的一面,门上没有插座。要求每段电线的两端必须仅与插座连接,电线之间不能互相交叉焊接。


输出要求:

对每一组測试,在一行里输出要将全部插座连通须要买的电线的最短整数长度。


输入样例:

10 10 10 4

0 1 3.3

2.5 0 2

5 0 0.8

5 10 1

0 0 0 0 0 3 1.5 0 0 1.5 0 3

0 0 0 0


输出样例:

21


这道题,注意下面几点:

① 布线要与墙平行

② 两插座位置关系

③ 线能够走地面,不能够走屋顶和门

④ 最后数据,向上取整


然后,题目考查的是最小生成树,但我花了非常多时间求两插座之间的距离= =。。

我代码凝视中出现的 1,2,3,4  4个面为:正对着我们的为 1号面,我们正对着1号面,它的左面为2号面,1号面右面为3号面,1号面相对着4号面。




然后,程序是:

/*******************************************  
********************************************  
*           Author:Tree                    *  
*    From :  blog.csdn.net/lttree          *  
*      Title : 最小生成树:室内布线        *  
*    Source: 数据结构_课程设计             *  
*      Hint :  最小生成树                  *  
********************************************  
*******************************************/   

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;


/******  一些相关变量的定义 ******/

// 插座个数,最多为20个,所以,边最多仅仅有400个
#define MAX 401
// 点的结构体
struct Node
{
	double x,y,z;
}nd[21],door[4];
// 含权值的边的结构体
struct Edge
{
	int u;
	int v;
	double quan;
}eg[MAX];
// N - 插座个数,len,wid,hei - 房间的长、宽、高,pos_door门所在位置
int N,len,wid,hei,pos_door;
int father[21];



/******  推断两插座位置关系  ******/

// 是否在同一墙面
bool isTogether( Node a , Node b )
{
	if( (a.x==b.x && (a.x==0||a.x==len) ) || (a.y==b.y && (a.y==0||a.y==wid) ) )	return true;
	return false;
}
// 推断是否在相邻墙面
bool isBeside( Node a , Node b )
{
	if( a.x==0 || a.x==len )
	{
		if( b.y==0 || b.y==wid )
			return true;
		else
			return false;
	}
	else if( a.y==0 || a.y==wid )
	{
		if( b.x==0 || b.x==len )
			return true;
		else
			return false;
	}
}
// 是否在相对墙面
bool isAcross( Node a , Node b )
{
	if( (a.x==0 && b.x==len) || (a.y==0 && b.y==wid) || (a.x==len && b.x==0) || (a.y==wid && b.y==0) )
		return true;
	else
		return false;
}



/******  一系列推断  ******/

// 求最小值
double Min( double a,double b)
{
	return a<b?a:b;
}
// 推断门在哪个墙面
int judge_d( Node d[] )
{
	if( d[0].y==0 && d[3].y==0 )	return 1;
	else if( d[0].x==0 && d[3].x==0 )	return 2;
	else if( d[0].x==len && d[3].x==len )	return 3;
	else if( d[0].y==wid && d[3].y==wid )	return 4;
}
// 推断两个同墙插座间连线是否穿门
bool judge_crossdoor( Node n1, Node n2 )
{
	// 假设插座在最以下,或者插座位置高于门的位置,则不穿过门(不管墙和插座位置关系怎样)
	if( n1.z==0 || n2.z==0 || n1.z>=door[3].z || n2.z>=door[3].z )	return false;
	if( pos_door==1 )
	{
		if( n1.y!=0 && n2.y!=0 )	return false;
		if( (n1.x>=door[3].x && n2.x>=door[3].x) || (n1.x<=door[0].x && n2.x<=door[0].x) )	return false;
		return true;
	}
	else if( pos_door==2 )
	{
		if( n1.x!=0 && n2.x!=0 )	return false;
		if( (n1.y<=door[0].y && n2.y<=door[0].y) || (n1.y>=door[3].y && n2.y>=door[3].y) )	return false;
		return true;
	}
	else if( pos_door==3 )
	{
		if( n1.x!=len && n2.y!=len )	return false;
		if( (n1.y<=door[0].y && n2.y<=door[0].y) || (n1.y>=door[3].y && n2.y>=door[3].y) )	return false;
		return true;
	}
	else
	{
		if( n1.y!=wid && n2.y!=wid )	return false;
		if( (n1.x>=door[3].x && n2.x>=door[3].x) || (n1.x<=door[0].x && n2.x<=door[0].x) )	return false;
		return true;
	}
}



/******  求布线长度  ******/

// 求同墙两插座最短布线
double find_togcost( Node a,Node b )
{

	// 两插座同墙且不穿门
	if( !judge_crossdoor( a , b ) )
		return (fabs(a.x-b.x)+fabs(a.y-b.y)+fabs(a.z-b.z));
	else	
	{
		// 两插座布线会穿过门,门的位置不同
		if( pos_door==1 || pos_door==4 )	return Min( (fabs(a.x-b.x)+fabs(door[3].z-a.z)+fabs(door[3].z-b.z) ),(fabs(a.x-b.x)+a.z+b.z) );
		else	return	Min( (fabs(a.y-b.y)+fabs(door[3].z-a.z)+fabs(door[3].z-b.z)),(fabs(a.y-b.y)+a.z+b.z) );
	}
}
// 求相对墙两插座最短布线
double find_acrcost( Node a,Node b )
{
	double cost1,cost2;
	Node temp1,temp2;
	// 插座在1,4面
	if( (a.y==0 && b.y==wid) || (b.y==0 && a.y==wid) )
	{
		// 依据门的位置,求权值
		if( pos_door==1 )	return	Min( Min( (a.y+fabs(door[3].z-a.z)+len+b.y),(a.y+a.z+len+b.y) ),Min( (wid-a.y+len+wid-b.y),(a.z+len+b.z) ) );
		else if( pos_door==2 )
		{
			temp1=temp2=a;
			temp1.y=0,temp2.y=wid;
			cost1=find_togcost(a,temp1);
			cost2=find_togcost(a,temp2);
			return	Min( (cost1+len+b.y),(cost2+len+wid-b.y) );
		}
		else if( pos_door==3 )
		{
			temp1=temp2=b;
			temp1.y=0,temp2.y=wid;
			cost1=find_togcost(b,temp1);
			cost2=find_togcost(b,temp2);
			return	Min( (cost1+len+a.y),(cost2+len+wid-a.y) );
		}
		else	return	Min( Min( (a.y+len+b.y),(wid-a.y+wid-b.y+fabs(door[3].z-a.z)+len) ), Min( (wid-a.y+wid-b.y+a.z+len),(a.z+b.z+len) ) );
		
	}
	else
	{
		if( pos_door==1 )
		{
			temp1=temp2=a;
			temp1.x=0,temp2.x=len;
			cost1=find_togcost(a,temp1);
			cost2=find_togcost(a,temp2);
			return	Min( (cost1+wid+b.x),(cost2+wid+len-b.x) );
		}
		else if( pos_door==2 )	return Min( Min( (a.x+b.x+wid+fabs(door[3].z-a.z)),(a.x+b.x+wid+a.z) ),Min( (len-a.x+len-b.x+wid),(a.z+b.z+wid) ) );
		else if( pos_door==4 )
		{
			temp1=temp2=b;
			temp1.x=0,temp2.x=len;
			cost1=find_togcost(b,temp1);
			cost2=find_togcost(b,temp2);
			return Min( (cost1+wid+a.x),(cost2+wid+len-a.x) );
		}
		else return Min( Min( (a.x+b.x+wid),(a.z+b.z+wid) ),Min( (len-a.x+len-b.x+fabs(door[3].z-a.z)+wid),(len-a.x+len-b.x+a.z+wid) ) );
	}
}
// 求相邻墙两插座最短布线
double find_bescost( Node a , Node b )
{
	Node temp=a;
	// 在两平面连接处找一个点(让当中一点x,y为0就可以),转化为两个 同墙插座 问题
	if( (a.x==0 && b.y==0) || (b.x==0 && a.y==0) )
	{	
		temp.x=temp.y=0;
		return ( find_togcost(a,temp)+find_togcost(b,temp) );
	}
	else if( (a.x==len && b.y==0) || (a.y==0 && b.x==len) )
	{
		temp.x=len,temp.y=0;
		return ( find_togcost(a,temp)+find_togcost(b,temp) );
	}
	else if( (a.x==0 && b.y==wid) || (b.x==0 && a.y==wid) )
	{
		temp.x=0,temp.y=wid;
		return ( find_togcost(a,temp)+find_togcost(b,temp) );
	}
	else
	{
		temp.x=len,temp.y=wid;
		return ( find_togcost(a,temp)+find_togcost(b,temp) );
	}
}



/******  求最小生成树(Kruscal)  ******/

// 比較函数
bool cmp(Edge e1,Edge e2)  
{  
    return e1.quan<e2.quan;  
}  
// 并查集 初始化函数  
void Init( int m )  
{  
    int i;  
    for(i=1;i<=m;i++)  
        father[i]=i;  
}  
// 并查集 查找函数  
int Find(int x)  
{  
    while(father[x]!=x)  
        x=father[x];  
    return x;  
}  
// 并查集 合并函数  
void Combine(int a,int b)  
{  
    int temp_a,temp_b;  
    temp_a=Find(a);  
    temp_b=Find(b);  
  
    if(temp_a!=temp_b)  
        father[temp_a]=temp_b;  
}  
// 最小生成树 Kruskal 算法  
double Kruskal( int n )  
{  
    Edge e;  
    int i;
	double res;  
    sort(eg,eg+n,cmp);  
    // 并查集 初始化  
    Init(N);  
  
    // 构建最小生成树  
    res=0;  
    for( i=0;i<n;++i )  
    {  
        e=eg[i];  
        if( Find(e.u)!=Find(e.v) )  
        {  
            Combine(e.u,e.v);  
            res+=e.quan;  
        }  
    }  
    return res;  
}  



/****** 主函数 ******/

void main()
{
	// i,j 为中间变量,k为边的个数
	int i,j,k;
	while( cin>>len>>wid>>hei>>N )
	{
		// 输入数据为4个0,则退出程序
		if( !len && !wid && !hei && !N )	break;
		
		// 获取数据(插座与门的位置)
		for( i=0 ; i<N ; ++i )
			cin>>nd[i].x>>nd[i].y>>nd[i].z;
		for( i=0 ; i<4 ; ++i )
			cin>>door[i].x>>door[i].y>>door[i].z;
		pos_door=judge_d( door );
		
		/* 求两点间距离(注意,布线要与墙平行) */
		k=0;
		for( i=0 ; i<N ; ++i )
		{
			for( j=i+1; j<N ; ++j )
			{
				eg[k].u=i;
				eg[k].v=j;
				// 推断两点关系,同墙or相邻墙or相对墙
				
				// 同墙
				if( isTogether( nd[i] , nd[j] ) )	eg[k].quan=find_togcost(nd[i],nd[j]);
				// 相对墙
				else if( isAcross( nd[i] , nd[j] ) )	eg[k].quan=find_acrcost(nd[i],nd[j]);
				// 相邻墙
				else	eg[k].quan=find_bescost(nd[i],nd[j]);
				++k;
			}
		}
		
		/* 用Kruscal算法求最小生成树 */
		// 注意最后,不管长度怎样,都要向上取整
		double cost;
		cost=Kruskal(k);
		if( cost-int(cost)==0 )	cout<<cost<<endl;
		else	cout<<int(cost+1)<<endl;
	}
}






***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

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

数据结构_课程设计——最小生成树:室内布线 的相关文章

  • 五大常用经典算法

    五大常用算法之一 分治算法 一 基本概念 在计算机科学中 分治法是一种很重要的算法 字面上的解释是 分而治之 就是把一个复杂的问题分成两个或更多的相同或相似的子问题 再把子问题分成更小的子问题 直到最后子问题可以简单的直接求解 原问题的解即
  • 01背包问题变种:从长度为n的数组里选出m个数使和为固定值sum

    这个问题是我从leetcode上一道问题所想到的 原题 如果是从数组中选出2个数相加使之成为固定的数sum 这当然很简单 把数组中的数字遍历一遍 判断另一个数字是否也在数组中即可 代码如下 vector
  • python 历险记(五)— python 中的模块

    目录 前言 基础 模块化程序设计 模块化有哪些好处 什么是 python 中的模块 引入模块有几种方式 模块的查找顺序 模块中包含执行语句的情况 用 dir 函数来窥探模块 python 的内置模块有哪些 结语 参考文档 系列文章列表 前言
  • 数据结构之链表与线性表

    数据结构之链表与线性表 线性表 顺序线性表 顺序表 顺序线性表 使用数组实现 一组地址连续的存储单元 数组大小有两种方式指定 一是静态分配 二是动态扩展 优点 随机访问特性 查找O 1 时间 存储密度高 逻辑上相邻的元素 物理上也相邻 缺点
  • 一文弄懂循环链表、双向链表、静态链表

    循环链表 双向链表 静态链表 三遍定律 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 1 循环链表 将单链表中终端结点的指针端由空指针改
  • 4399 C++笔试题

    1 写出一个函数 取到链表中倒数第二个节点 双链表 node getSec List mylist return mylist m tail gt m prev m prev为链表前指针 单链表 node getSec List mylis
  • Hash table and application in java

    查找的效率取决于在查找是比较的次数 次数越少效率越高 反之越低 最理想的情况是无需比较 一次存取便能找到所查找的记录 根据对应关系f找到给定值K的像f K hash function 应运而生 由此思想建的表称为hash table 集合h
  • 数据结构----链式栈

    目录 前言 链式栈 操作方式 1 存储结构 2 初始化 3 创建节点 4 判断是否满栈 5 判断是否空栈 6 入栈 7 出栈 8 获取栈顶元素 9 遍历栈 10 清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法 链接 线性表 栈 栈
  • PCL—低层次视觉—点云分割(RanSaC)

    点云分割 点云分割可谓点云处理的精髓 也是三维图像相对二维图像最大优势的体现 不过多插一句 自Niloy J Mitra教授的Global contrast based salient region detection出现 最优分割到底鹿死
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • Python 实现列队

    1 列队定义 队列是项的有序结合 其中添加新项的一端称为队尾 移除项的一端称为队首 当一个元素从队尾进入队列时 一直向队首移动 直到它成为下一个需要移除的元素为止 最近添加的元素必须在队尾等待 集合中存活时间最长的元素在队首 这种排序成为
  • 算法系列15天速成——第八天 线性表【下】

    一 线性表的简单回顾 上一篇跟大家聊过 线性表 顺序存储 通过实验 大家也知道 如果我每次向 顺序表的头部插入元素 都会引起痉挛 效率比较低下 第二点我们用顺序存储时 容 易受到长度的限制 反之就会造成空间资源的浪费 二 链表 对于顺序表存
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • 4Sum

    Given an array S of n integers are there elements a b c and d in S such that a b c d target Find all unique quadruplets
  • Unique Binary Search Trees -- LeetCode

    原题链接 http oj leetcode com problems unique binary search trees 这道题要求可行的二叉查找树的数量 其实二叉查找树可以任意取根 只要满足中序遍历有序的要求就可以 从处理子问题的角度来
  • CRC校验(二)

    CRC校验 二 参考 https blog csdn net liyuanbhu article details 7882789 https www cnblogs com esestt archive 2007 08 09 848856
  • 数据结构与算法-列表(双向链表)设计及其排序算法

    0 概述 本文主要涵盖列表 双向链表 的设计及其排序算法的总结 列表是一种典型的动态存储结构 其中的数据 分散为一系列称作节点 node 的单位 节点之间通过指针相互索引和访问 为了引入新节点或删除原有节点 只需在局部调整少量相关节点之间的
  • 插入排序超详解释,一看就懂

    目录 一 插入排序的相关概念 1 基本思想 2 基本操作 有序插入 二 插入排序的种类 三 直接插入排序 1 直接插入排序的过程 顺序查找法查找插入位置 2 使用 哨兵 直接插入排序 四 直接插入排序算法描述 五 折半插入排序 1 查找插入
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子

随机推荐

  • Java格式化字符串

    String类的静态format 方法用于创建格式化的字符串 format 方法有两种重载形式 1 public static String format String format Object args 该方法使用指定的格式字符串和参数
  • Java无向图链表、邻接表实现以及深度优先遍历广度优先遍历

    概述 图的存储形式中链表是通过数组加LinkedList 不一定是LinkedList 可以自己写链 也可以选择其他的集合数据结构 邻接表采用的是二维数组的结构 链表存储形式的相关实现 数据存储结构与基础操作 初始化数据存储结构 priva
  • mysql5.7小版本升级-windows

    mysql5 7小版本升级 windows 应用场景 mysql 5 7 20升级到当前最新的5 7 31 Windows环境 官网下载链接 https dev mysql com downloads mysql 5 7 html 注意 操
  • 区间预测

    区间预测 MATLAB实现GARCH分位数时间序列预测 目录 区间预测 MATLAB实现GARCH分位数时间序列预测 效果一览 基本介绍 模型描述 程序设计 研究总结 参考文献 效果一览 基本介绍 GARCH代表广义自回归条件异方差 它是一
  • 2015~2019年教育大数据会议期刊汇总及论文总结(不再更新)

    以下论文大部分与个性化导学相关 1 数据挖掘会议 AAAI AAAI 17 Question dif culty prediction for reading problems in standard tests AAAI 18 Medic
  • ftp服务器密码为空,ftp服务器无密码设置密码

    ftp服务器无密码设置密码 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 如果在创建弹性云服务器时未设置密码 或密码丢失
  • 可以自定义公式的计算器_超多的计算器 总有一个用得上

    本期为大家分享几款计算器 这几款计算器足以满足你所有需求 功能强大 你值得拥有 01 Symbolab Practice 你的私人数学导师 以步骤展示任何数学问题解决步骤 数学计算Symbolab计算器将能为你解决 1 代数 等式 不等式
  • 单链表(数组模拟:静态链表)

    单链表 实现一个单链表 链表初始为空 支持三种操作 向链表头插入一个数 删除第 kk 个插入的数后面的数 在第 kk 个插入的数后插入一个数 现在要对该链表进行 MM 次操作 进行完所有操作后 从头到尾输出整个链表 注意 题目中第 kk 个
  • MySQL 临时表与内存表的区别

    文章目录 1 临时表 2 内存表 3 区别 4 小结 在 MySQL 中 Temporary Table 临时表 和 Memory Table 内存表 是两种不同的表类型 它们有一些重要的区别和用途 1 临时表 临时表 Temporary
  • PAA介绍

    ECCV 2020 的一篇文章 论文地址 https arxiv org abs 2007 08103 目录 一 简介 摘要 整个策略流程为 二 相关背景介绍 三 提出的方法 3 1 概率Anchor分配算法 3 2 测试阶段加入预测IoU
  • 我用ChatGPT写2023高考语文作文(一):全国甲卷

    2023年 全国甲卷 适用地区 广西 贵州 四川 西藏 人们因技术发展得以更好地掌控时间 但也有人因此成了时间的仆人 这句话引发了你怎样的联想与思考 请写一篇文章 要求 选准角度 确定立意 明确文体 自拟标题 不要套作 不得抄袭 不得泄露个
  • 怎么修复老照片?给你推荐这几个修复方法

    相信大家的家里都有老照片吧 那在你们翻看这些老照片的时候 有没有发现有些老照片变得有些破旧 泛黄 模糊等情况呢 看到这些情况 大家是不是会很心疼呢 因为这些老照片都充满了各种各样的回忆 根本拍不出第二张同样的照片 但其实我们可以使用软件来修
  • 设计模式原则-开闭原则

    设计模式原则 开闭原则 1 概述 开闭原则 Open Closed Principle 是编程中最基础 最重要的设计原则 一个软件实体如类 模块和函数应该对扩展开放 对提供方 对修改关闭 对使用方 用抽象构建框架 用实现扩展细节 当软件需要
  • 8个Python实用脚本,赶紧收藏

    脚本写的好 下班下得早 程序员的日常工作除了编写程序代码 还不可避免地需要处理相关的测试和验证工作 例如 访问某个网站一直不通 需要确定此地址是否可访问 服务器返回什么 进而确定问题在于什么 完成这个任务 如果一味希望采用编译型语言来编写这
  • java调用webservice接口 三种方法

    摘自其它 webservice的 发布一般都是使用WSDL web service descriptive language 文件的样式来发布的 在WSDL文件里面 包含这个webservice暴露在外面可供使用的接口 今天搜索到了非常好的
  • python 协程可以嵌套协程吗_Python学习后有哪些方向可以选择?Python有什么好的学习方法吗?(附教程)...

    随着人工智能的发展 Python近两年也是大火 越来越多的人加入到Python学习大军 对于毫无基础的人该如何入门Python呢 这里整理了一些个人经验和Python入门教程供大家参考 如果你是零基础入门 Python 的话 建议初学者至少
  • 3.1 向量的模和单位向量

    向量的长度和单位向量 向量的长度 模 u 3 4 该向量的大小是多少 u 5 二范数 欧拉距离 在二维空间中 可以直接根据勾股定理计算出 u OP 2 3 5 该向量的大小是多少 n维向量 求模 同理 单位向量 在向量上记 为单位向量 长度
  • 股票数据API整理

    最近在做股票分析系统 数据获取源头成了一大问题 经过仔细的研究发现了很多获取办法 这里整理一下 方便后来者使用 获取股票数据的源头主要有 数据超市 雅虎 新浪 Google 和讯 搜狐 ChinaStockWebService 东方财富客户
  • k8s--基础--23.1--认证-授权-准入控制--介绍

    k8s 基础 23 1 认证 授权 准入控制 介绍 1 介绍 k8s对我们整个系统的认证 授权 访问控制做了精密的设置 对于k8s集群来说 apiserver是整个就集群访问控制的唯一入口 我们在k8s集群之上部署应用程序的时候 可以通过宿
  • 数据结构_课程设计——最小生成树:室内布线

    转载请注明出处 http blog csdn net lttree 这道课程设计 费不少时间 太麻烦了 明明是能力不够 最小生成树 室内布线 题目要求 装修新房子是一项颇为复杂的project 如今须要写个程序帮助房主设计室内电线的布局 首