变色龙(Floyd算法)
变色龙
避役(学名:Chamaeleonidae)(英语:chameleon)俗称变色龙,蜥蜴亚目(Sauria)避役科(Chamaeleontidae)爬行类,产于东半球。特征为体色能变化,它在每天会进行变色,可以变成N种颜色之一,将这些颜色标号为0,1,2...N-1。最近研究发现变色龙不是靠色素细胞变色,而是靠体内的基因,变色龙的基因内存在一个变色矩阵,记为Genemap,如果Genemap[i][j] = 'Y',则变色龙可以在某天从颜色i变成颜色j(一天不可以变色多次),如果Genemap[i][j] =‘N’则不能从i变成j色。最新又发现,变色龙的变色不是任意变的,它有一定的规律,这个规律是在某天,如果只有一种可以改变的颜色,它就变为这种颜色,如果有多种可以改变的颜色,那么它变为标号最小的颜色,如果不存在任何一种可以改变的颜色,那就不变色,注意可以变色时它一定会变色。小明在淘宝上买了一只颜色为0的变色龙,他想让这只变色龙变为颜色N-1,然后他向当地医院求助,医生有一项技术可以改变变色龙的一些基因,但需要花费高昂的代价,具体说小明可以花费1万元的代价,让医生将变色龙的变色矩阵中的某一个Genemap[i][j] = 'Y'改变成Genemap[i][j] = 'N'。问至少花费多少总代价改变变色龙的基因,让变色龙按它的变色规律可以从颜色0经过若干天的变色变成颜色N-1。如果一定不能变成N-1,则输出-1.
Input
第一行一个整数T(1<=T<=5),表示测试数据数量,每组测试数据有相同的结构构成: 每组数据第一行一个整数N(2<=N<=50)。 之后有N行,每行N个字符,表示变色龙的变色矩阵,矩阵中只有‘Y’与‘N’两种字符,第i行第j列的字符就是Genemap[i][j]。
Output
每组数据一行输出,即最小代价,无解时输出-1
Sample Input 1
3
3
NYN
YNY
NNN
8
NNNNNNNY
NNNNYYYY
YNNNNYYN
NNNNNYYY
YYYNNNNN
YNYNYNYN
NYNYNYNY
YYYYYYYN
6
NYYYYN
YNYYYN
YYNYYN
YYYNYN
YYYYNN
YYYYYN
Sample Output 1
1 0 -1题解:要想从颜色i变成颜色j,需要Genemap[i][0]到Genemap[i][j-1]没有出现Y,如果出现,需改成N,即两点之间的花费加一。转化为求Genemap[i][0]到Genemap[i][j]的最短路问题。特别注意Floyd算法中三重循环i,j,k的顺序。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define inf 0x3f3f3f3f 6 using namespace std; 7 const int maxn=100; 8 char s[maxn][maxn]; 9 int map[maxn][maxn]; 10 int main() 11 { 12 int n,casen; 13 cin>>casen; 14 while(casen--) 15 { 16 memset(map,inf,sizeof(map)); 17 scanf("%d",&n); 18 for(int i=0;i<n;i++) 19 { 20 int cnt=0; 21 scanf("%s",s[i]); 22 for(int j=0;j<n;j++) 23 { 24 if(s[i][j]=='Y') 25 map[i][j]=cnt++; 26 } 27 } 28 for(int k=0;k<n;k++)//从i到j的最短距离需要经过0-n-1顶点进行中转 29 { 30 for(int i=0;i<n;i++) 31 { 32 for(int j=0;j<n;j++) 33 { 34 if(map[i][j]>map[i][k]+map[k][j]) 35 map[i][j]=map[i][k]+map[k][j]; 36 } 37 } 38 } 39 if(map[0][n-1]==inf) 40 printf("-1\n"); 41 else 42 printf("%d\n",map[0][n-1]); 43 } 44 return 0; 45 }
转载于:https://www.cnblogs.com/1013star/p/9558649.html
变色龙(Floyd算法)相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)
Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...
- 最小环算法求解(Dijkstra算法+Floyd算法)
方法一: #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> ...
- HDU2544(Bellman-ford算法和Floyd算法)
思路: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0: 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对 ...
- 【图论专题】Floyd算法及其扩展应用
Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...
- 【图论】用一道题从本质上讲清楚Floyd算法
P1119 [灾后重建] 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4 -1 -1 5 4 一道非常好的Flo ...
- 图的单源最短路径,Floyd算法(数据结构c++)
这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...
- floyd算法_最短路径的算法:Floyd算法
点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...
- 最短路径—Dijkstra算法和Floyd算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 最短路径-Dijkstra算法与Floyd算法
最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...
最新文章
- SDH/E1/T1/E3/T3/STM/TDM相关名词介绍
- PostgreSQL示例demo
- 华为手机充满有提醒吗_华为推出的联发科天玑手机华为nova8 SE,你会买吗?
- SAP Spartacus npm install 里包含的 postinstall
- 解决Ubuntu IDEA 不能输入中文
- 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
- iphone查看html源码的app,使用扩展App在Safari上查看源代码
- Codejock.Xtreme.Toolkit.Pro.v15.3.1 vs2019可用
- Linux TCP/UDP调试助手下载安装(转载备忘)
- Flutter文本或图片生成PDF文件
- 蓝牙 UUID 解释
- maya建模模型变黑问题解决
- 在 UltraEdit /UEStudio 中配置自动更正关键字
- Android_自定义倒计时View
- 绩效考核-项目经理绩效考核指标
- Linux就业形势报告
- (翻译)黑底白字样式的使用时机
- Pandas学习-Day3
- JavaSE学习笔记 - 基础(1)
- Java项目源码javaweb花店销售管理系统
热门文章
- Chrome浏览器更新后,无法调用Lodop打印
- BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...
- 怎么样向云服务器上传文件_如何上传文件到阿里云服务器?
- Centos安装Wordpress
- 数字类型与列表——python
- 火车票能不能选座_电话订火车票可以自己选座位吗
- cdr转换成html格式,cdr生成对象
- mariadb-libs 被 mysql-community-libs-compat-8.0.26-1.el7.x86_64 取代
- c语言 gets getc,6.16 C语言,getchar gets getc有什么区别 分别是表示什么的
- 服务器配置高点网站打开速度,网站打开速度慢,你必须要解决的事?