Uinty学习记录-Inspector窗口中的可编辑变量
Uinty学习记录-Inspector窗口中的可编辑变量. Unity中, public变量是默认可以在Inspector窗口中进行编辑的, 而protected和private变量是默认不能在窗口中进行编辑的。 加上强制序列化字段显示编辑 [SerializeField] :强制序列化字段 123//加上强制序列化字段特性可以显示编辑[SerializeField]//强制序列化字段private int playerLevel = 1; 效果: 利用强制序列化字段使pulic不能显示编辑 [HideInInspector] :让public不能显示编辑 可以被显示编辑的类型 大部分类型都能显示编辑,包括数组,枚举类型等。 但自定义的类、结构体不支持显示编辑,需要在定义语句前加强制序列化字段 [System.Serializable] 才可以编辑 12345678910//结构体[System.Serializable]public struct MyStruct{ public int...
二分图最大匹配-匈牙利算法
二分图最大匹配-匈牙利算法 匈牙利算法是通过找增广路来实现匹配数的增加。当前匹配方案如果再也找不到增广路,则匹配数达到最大。 核心流程: 从任意一个未被匹配的点开始。任选一条边(u-v)开始配对。如果v此时没有被配对,则配对成功。 如果v已经被配对了(v-w)。那么先尝试对w进行另一个配对,如果w成功匹配另一个点(w-x),那么 u-v配对成功,我们找到了一条增广路。实际中要用标记数组防止 w-u的情况 :w和u必然在同一边 实际上。我们只要对二分图的一边进行匹配,一边匹配完了另一边自然也匹配好了。该算法实际上是对一边(例如左边)进行匹配,详情看洛谷例题 如果配对失败那么尝试u的其他配对方案,直到u配对成功或所有方案均尝试为止 继续对剩下的顶点进行配对 输出配对数 示例问题:CP配对 有2n个人物,m组关系,两个人物之间有关系则可以组成cp,求最大匹配数 数据格式: 1234563 51 11 22 22 33...
图的桥-tarjan算法求图的桥
图的桥-tarjan算法求图的桥 求图的桥和求图的割点差不多,只是判断条件改为:low[i]>num[cur] ,即顶点i无法回到祖先,也没有另外一条路可以回到父亲,则cur-i是桥 核心代码 1234567891011121314151617181920212223242526272829303132333435void dfs(int* num,int* low,int** arr,int cur, int father){ index++;//时间戳增加 num[cur] = index;//记录当前节点的时间戳 low[cur] = index;//记录当前节点所能回溯的最早时间戳,最开始当然是自己 for (int i = 1; i <=point; i++)//枚举与当前顶点相邻接的顶点 { if (arr[cur][i]==1)//如果两个顶点相邻接 { if (num[i] == 0)//如果顶点i的时间戳为0,则顶点i还没有被访问过 { dfs(num, low, arr, i,...
图的割点-tarjan算法求图的割点
图的割点-tarjan算法求图的割点 在无向连通图中讨论 核心思想: 用num数组来存储每个顶点被访问的时间戳 用low数组来存储每个顶点 所能回溯的 最早被访问的顶点的时间戳,是不断更新的 如果存在一个顶点i,i是当前顶点cur的孩子,且low[i]>=num[cur],即i在不通过父节点(即cur)的情况下最多只能回溯到cur,则cur为一个割点**(cur不是根节点的情况下)** 如果cur为根节点,则如果cur有两个或以上的孩子节点,则cur为割点 示例问题 一场大战即将打响,我们已经收集到敌人城市的地图,希望炸毁其中一座城市,使得剩下的城市中间不能两两互通。数据给出格式如下: 123456786 71 41 34 23 22 52 6 5...
图的最小生成树-Prim算法
图的最小生成树-Prim算法 思想: 将图中的顶点分成两类:树顶点和非树顶点 首先选择一个顶点加入生成树 枚举树顶点的所有出边,看看哪些边可以连接到非树顶点,并且边越短越好 连接非树顶点,重复步骤直到n个顶点全都加到生成树中 在步骤2中,枚举所有出边是比较费时的,可以利用Dijkstra最短路径算法的思想,利用一个dis数组记录各个顶点到源点的距离,每次往生成树加入点后看看这个点能否使非树顶点到生成树的距离变短 镖局问题Prim算法版本 整体代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576#include<iostream>using namespace std;int main(){ int point,edge;//点数和边数 int minl = 0;//记录总和 int inf =...
图的最小生成树—Kruskal算法
图的最小生成树—Kruskal算法 Kruskal算法的思想是: 选择最短的边 将边的起点和终点加入集合中,将边标记后选出 再次选择最短的边,且该边的起点和终点不在同一集合中(避免产生回路) 再次将点纳入集合,将边选出 重复步骤3,4,直到将n-1条边选出到生成树(最小生成树只有n-1条边)中。 Kruskal算法是对边进行遍历,只要每次选出来的边是合法的且最短的,生成树就是最小生成树 合法的:边的起点终点不在同一集合中,即不产生回路 最短的:满足前提条件下权值最小的 如何判断两点是否在同一集合中?:利用并查集 示例题目: 镖局运镖需要向路上的绿林好汉打点,每条路的打点费用有高有低,镖局如何选择道路,使得镖局可以到达任意城镇且打点费用最少? 数据给出格式如下: 123456789106 92 4 113 5 134 6 35 6 42 3 64 5 71 2 13 4 91 3 2 第一行两个数字 a b ,表示有a个城镇,b条道路 接下来b行,每行三个数字 u v w ,表示从...
并查集
并查集 并查集也称为不相交集数据结构。其目的是找出元素之间的关系并归为若干个集合。 题目示例: 某地的警察发现几条关于犯罪分子的线索,求当地有几个独立的犯罪团伙: 数据给出格式如下: 123456789101111 101 23 45 24 62 67 118 79 79 111 6 第一行两个数字a b,表示有a个犯罪分子和b条线索 第二行开始有b行线索,每行两个数字a b,表示a 和 b两个犯罪分子是团伙 注意,团伙的团伙也是团伙 利用并查集让团伙的两个犯罪分子”归顺“其中一个,默认右边归顺左边,即靠左原则 解题代码 整体代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071//并查集#include<iostream>using namespace std;int peo, clue;//人数和线索数int getFather(int*...
图的最短路径算法对比
图的最短路径算法对比 Floyd Dijkstra Bellman-Ford 队列优化的Bellman-Ford 空间复杂度 O(N^2) O(M) O(M) O(M) 时间复杂度 O(N^3) O((M+N)logN) O(NM) 最坏情况下也是O(NM) 适用情况 稠密图 稠密图 稀疏图 稀疏图 负权 可以解决 不能解决 可以解决 可以解决 有负权边 可以处理 不能处理 可以处理 可以处理 判断是否有负权回路 不能 不能 可以判定 可以判定 Floyd算法整体时间复杂度高,但可以处理带有负权边的图(无法处理负权回路),编码复杂度小 Dijkstra算法无法处理带有负权边以及负权回路的图,但具有可扩展性 Bellman-Ford算法可以处理带有负权边和负权回路的图
C#学习记录—密封类和密封方法
C#学习记录—密封类和密封方法 密封类 密封类,关键字 sealed 1234sealed class Son::Father{ } 其作用是让类无法再被继承 加强了面向对象程序设计的规范性,结构性,安全性 密封方法 密封方法可以使一个方法不能再被重写 12345678910111213abstract class Person{ public void Eat();}class Man:Person{ public sealed override void Eat() { } //使用sealed关键字密封方法,让方法不能再被重写}





