变色龙

  避役(学名: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算法)相关推荐

  1. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  2. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  3. 最小环算法求解(Dijkstra算法+Floyd算法)

    方法一: #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> ...

  4. HDU2544(Bellman-ford算法和Floyd算法)

    思路: 1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0: 2.后续进⾏最多 n-1 次遍历操作 (n 为顶点个数), 对 ...

  5. 【图论专题】Floyd算法及其扩展应用

    Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...

  6. 【图论】用一道题从本质上讲清楚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 ...

  7. 图的单源最短路径,Floyd算法(数据结构c++)

    这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...

  8. floyd算法_最短路径的算法:Floyd算法

    点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...

  9. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  10. 最短路径-Dijkstra算法与Floyd算法

    最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...

最新文章

  1. SDH/E1/T1/E3/T3/STM/TDM相关名词介绍
  2. PostgreSQL示例demo
  3. 华为手机充满有提醒吗_华为推出的联发科天玑手机华为nova8 SE,你会买吗?
  4. SAP Spartacus npm install 里包含的 postinstall
  5. 解决Ubuntu IDEA 不能输入中文
  6. 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
  7. iphone查看html源码的app,使用扩展App在Safari上查看源代码
  8. Codejock.Xtreme.Toolkit.Pro.v15.3.1 vs2019可用
  9. Linux TCP/UDP调试助手下载安装(转载备忘)
  10. Flutter文本或图片生成PDF文件
  11. 蓝牙 UUID 解释
  12. maya建模模型变黑问题解决
  13. 在 UltraEdit /UEStudio 中配置自动更正关键字
  14. Android_自定义倒计时View
  15. 绩效考核-项目经理绩效考核指标
  16. Linux就业形势报告
  17. (翻译)黑底白字样式的使用时机
  18. Pandas学习-Day3
  19. JavaSE学习笔记 - 基础(1)
  20. Java项目源码javaweb花店销售管理系统

热门文章

  1. Chrome浏览器更新后,无法调用Lodop打印
  2. BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...
  3. 怎么样向云服务器上传文件_如何上传文件到阿里云服务器?
  4. Centos安装Wordpress
  5. 数字类型与列表——python
  6. 火车票能不能选座_电话订火车票可以自己选座位吗
  7. cdr转换成html格式,cdr生成对象
  8. mariadb-libs 被 mysql-community-libs-compat-8.0.26-1.el7.x86_64 取代
  9. c语言 gets getc,6.16 C语言,getchar gets getc有什么区别 分别是表示什么的
  10. 服务器配置高点网站打开速度,网站打开速度慢,你必须要解决的事?