哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。

现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定动物的本事。于是他来问你:带什么动物去可以让最难变的那种动物(即该动物变为哈利·波特自己带去的动物所需要的魔咒最长)需要的魔咒最短?例如:如果只有猫、鼠、鱼,则显然哈利·波特应该带鼠去,因为鼠变成另外两种动物都只需要念4个字符;而如果带猫去,则至少需要念6个字符才能把猫变成鱼;同理,带鱼去也不是最好的选择。

输入格式:

输入说明:输入第1行给出两个正整数N (≤100)和M,其中N是考试涉及的动物总数,M是用于直接变形的魔咒条数。为简单起见,我们将动物按1~N编号。随后M行,每行给出了3个正整数,分别是两种动物的编号、以及它们之间变形需要的魔咒的长度(≤100),数字之间用空格分隔。

输出格式:

输出哈利·波特应该带去考场的动物的编号、以及最长的变形魔咒的长度,中间以空格分隔。如果只带1只动物是不可能完成所有变形要求的,则输出0。如果有若干只动物都可以备选,则输出编号最小的那只。

输入样例:

6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80

输出样例:

4 70

小结: 一道简单的练习题,考察的是图的多源最短路径问题,利用Floyd算法得出每个顶点到其他顶点的距离,再比较这些距离得出想要的答案;基础很重要,诸君共勉。

​​​​​​​​​​​​​​

#include <stdio.h>
#include <stdlib.h>
#define INFINITY 65535 //>9900即可
#define MaxVertexNum 101typedef int Vertex;typedef struct _Edge{Vertex V1,V2;int Weight;
}Edge;typedef struct _MGraph{int Nv;int Ne;Vertex G[MaxVertexNum][MaxVertexNum];
}MGraph;int D[MaxVertexNum][MaxVertexNum];MGraph* BuildGraph();void InsertEdge( MGraph* Graph,Edge E );void Floyd( MGraph* Graph );void solve( MGraph* Graph );int Max( MGraph* Graph,Vertex V );int main()
{MGraph* Graph = BuildGraph();Floyd( Graph );solve( Graph );free(Graph);return 0;
}MGraph* BuildGraph()
{MGraph* Graph = (MGraph*)malloc(sizeof(MGraph));scanf("%d %d",&(Graph->Nv),&(Graph->Ne));Vertex V,W;for(V=1;V<=Graph->Nv;V++){for(W=1;W<=Graph->Nv;W++){if(V ==W ){Graph->G[V][W] = 0;}else{Graph->G[V][W] = INFINITY;}}}int i;Edge E;for(i=0;i<Graph->Ne;i++){scanf("%d %d %d",&E.V1,&E.V2,&E.Weight);InsertEdge( Graph,E );}// int j;
//  for(i=1;i<=Graph->Nv;i++){
//      for(j=1;j<=Graph->Nv;j++){
//
//          printf("%d ",Graph->G[i][j]);
//      }
//      printf("\n");
//  }return Graph;
}void InsertEdge( MGraph* Graph,Edge E )
{Graph->G[E.V1][E.V2] = Graph->G[E.V2][E.V1] = E.Weight;
}void Floyd( MGraph* Graph )
{int i,j,k;for(i=1;i<=Graph->Nv;i++){for(j=1;j<=Graph->Nv;j++){D[i][j] = Graph->G[i][j];}}for(k=1;k<=Graph->Nv;k++){for(i=1;i<=Graph->Nv;i++){for(j=1;j<=Graph->Nv;j++){if(D[i][k] + D[k][j] < D[i][j]){D[i][j] = D[i][k] + D[k][j];}}} }// for(i=1;i<=Graph->Nv;i++){
//      for(j=1;j<=Graph->Nv;j++){
//
//          printf("%d ",D[i][j]);
//      }
//      printf("\n");
//  }
}void solve( MGraph* Graph )
{int MaxSpellLength[Graph->Nv+1];Vertex V;for(V=1;V<=Graph->Nv;V++){MaxSpellLength[V] = Max( Graph,V );}int MinVertex = 1;for(V=2;V<=Graph->Nv;V++){if(MaxSpellLength[V] < MaxSpellLength[MinVertex]){MinVertex = V;}}if(MaxSpellLength[MinVertex] != INFINITY){printf("%d %d",MinVertex,MaxSpellLength[MinVertex]);}else{printf("0");}
}int Max( MGraph* Graph,Vertex V )
{Vertex W;int Max = D[V][Graph->Nv];for(W=1;W<=Graph->Nv;W++){if(D[V][W] > Max ){Max = D[V][W];}}return Max;
}

MOOC 07-图4 哈利·波特的考试相关推荐

  1. 7-8 哈利·波特的考试 (25 分)(详解+思路分析)真香啊

    一:题目: 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的 ...

  2. 数据结构与算法A实验六图论---7-2 哈利·波特的考试(Flody算法)

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  3. 7-8 哈利·波特的考试

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  4. 7-8 哈利·波特的考试 (25 分)

    7-8 哈利·波特的考试 (25 分) 看懂题,比较简单. 用Floyd算法. 1.首先将数据读入,用来初始化图 2.用Floyd得到最短路径(各点到各点的全部最短路径). 3.先求出每个点到其它点的 ...

  5. PTA 哈利·波特的考试 思路分析及代码解析

    PTA 哈利·波特的考试 思路分析及代码解析v0.9.1 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析(重点) ...

  6. PTA 7-1 哈利·波特的考试

    题目描述 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔 ...

  7. 7-1 哈利·波特的考试 (25分)

    7-1 哈利·波特的考试 (25分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...

  8. 07-图4 哈利·波特的考试(Folyd算法,Dijkstra算法)

    07-图4 哈利·波特的考试 分数 25 作者 陈越 单位 浙江大学 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成 ...

  9. (PTA) 7-2 哈利·波特的考试 分数 25

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

最新文章

  1. Intellij IDEA单元测试提示Test events were not received
  2. 静态移值编译的关键环境变量
  3. 【dfs】简单游戏(jzoj 2121)
  4. 可以无限增加iPhone 的图标吗?
  5. linux内核下载 编译
  6. 凯恩帝k1000ti参数设置_KND1000TI系统参数
  7. inmotion服务器账号密码,InMotionHosting如何通过SSH连接服务器
  8. 【人工智能项目】深度学习实现图像多标签分类
  9. P1957 口算练习题[c++版]
  10. 【计算机组成原理】 数据的表示和运算
  11. word文档中统计总页数_如何在Google文档中查找页数和字数统计
  12. win10问题:无任何操作,2分钟后电脑就自动休眠
  13. Neo4j入门:手动构建节点关系
  14. 下一次工业转型已经到来:罗克韦尔自动化在2018年自动化博览会帮助企业为成功做好准备
  15. android模拟器 报错:X Error of failed request: BadRequest (invalid request code or no such operation)
  16. Linux学习高手写给初学者的经验谈
  17. 隐藏手机号码中间四位数
  18. 暗夜精灵5安装Manjaro 18.1.0 Juhraya
  19. 【指纹识别】基于matlab指纹图像细节特征提取 【含Matlab源码 227期】
  20. 林仕鼎谈数据中心计算(二):存储资源分层

热门文章

  1. 最简单理解并实现斐波那契数列函数(c语言)
  2. cpua55和a53哪个好_OPPOA53搭载什么处理器-跑分是多少
  3. SpringSecurity(八)用户数据获取之SpringSecurityContextHolder深度剖析(下)
  4. 多语种翻译-免费多语种翻译软件
  5. linuxIPC之信号量(集)
  6. lede旁路由设置方法
  7. 抓紧赶上ChatGPT这股风,错过这次不知道还有没有下一次
  8. 如何把计算机上锁的d盘解锁,磁盘加锁记录没有了怎么解除加锁?
  9. Android相机实况模式,安卓实况拍照怎么用
  10. Building Coder(Revit 二次开发)- 设置匹配范围框的视图剖视框