07-图4 哈利·波特的考试(25 分)
来源:互联网 发布:网络犯罪调查第二季 编辑:程序博客网 时间:2024/06/03 05:06
哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。
现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定动物的本事。于是他来问你:带什么动物去可以让最难变的那种动物(即该动物变为哈利·波特自己带去的动物所需要的魔咒最长)需要的魔咒最短?例如:如果只有猫、鼠、鱼,则显然哈利·波特应该带鼠去,因为鼠变成另外两种动物都只需要念4个字符;而如果带猫去,则至少需要念6个字符才能把猫变成鱼;同理,带鱼去也不是最好的选择。
输入格式:
输入说明:输入第1行给出两个正整数N (≤)和M,其中N是考试涉及的动物总数,M是用于直接变形的魔咒条数。为简单起见,我们将动物按1~N编号。随后M行,每行给出了3个正整数,分别是两种动物的编号、以及它们之间变形需要的魔咒的长度(≤),数字之间用空格分隔。
输出格式:
输出哈利·波特应该带去考场的动物的编号、以及最长的变形魔咒的长度,中间以空格分隔。如果只带1只动物是不可能完成所有变形要求的,则输出0。如果有若干只动物都可以备选,则输出编号最小的那只。
输入样例:
6 113 4 701 2 15 4 502 6 505 6 601 3 704 6 603 6 805 1 1002 4 605 2 80
输出样例:
4 70
#include<iostream>#include<fstream>using namespace std;//ifstream InFile("C:\\Users\\DELL\\Desktop\\in.txt",ios::in);#define MaxVertexNum 200 //最大顶点数设为100#define INFINITY1 65535 //∞设为双字节无符号整数的最大值65535typedef int Vertex; //用顶点下标表示顶点,为整形typedef int WeightType; //边的权值设为整形typedef char DataType; //顶点储存的数据类型设为字符型//*************************************************************************图结点的定义typedef struct GNode* PtrToGNode;struct GNode{int Nv; //顶点数int Ne; //边数WeightType G[MaxVertexNum][MaxVertexNum]; //邻接矩阵DataType Data[MaxVertexNum]; //存顶点的数据//注意:若顶点无数据,此时Data[]可以不出现};typedef PtrToGNode MGraph;//*************************************************************************边的定义typedef struct ENode* PtrToENode;struct ENode{Vertex V1,V2; //无向边(v1,v2)WeightType Weight; //权重};typedef PtrToENode Edge;MGraph CreateGraph(int VertexNum){MGraph Graph = new GNode;Graph->Nv = VertexNum;Graph->Ne = 0;for(int i=0;i<Graph->Nv+2 ;++i){for(int j=0;j<Graph->Nv+2 ;++j){Graph->G[i][j] = INFINITY1;}}return Graph;}void InsertEdge(MGraph Graph,Edge E){Graph->G[E->V1][E->V2] = E->Weight;Graph->G[E->V2][E->V1] = E->Weight;}MGraph BulidGraph(){Vertex N,M;cin >> N>>M;Edge E=new ENode;MGraph Graph = CreateGraph(N);if(Graph->Nv >0){for(int i=0;i<M;++i){cin >> E->V1 >> E->V2 >> E->Weight;InsertEdge(Graph, E);}}return Graph;}//****************************************************Floydbool Floyd(MGraph Graph,WeightType D[][MaxVertexNum]){for(int i=0;i<Graph->Nv +2;++i){for(int j=0;j<Graph->Nv +2;++j){D[i][j] = Graph->G[i][j];}}for(int k=1;k<=Graph->Nv ;++k){for(int i=0;i<=Graph->Nv ;++i){for(int j=0;j<=Graph->Nv ;++j){if(i!=j&&D[i][k]+D[k][j]<D[i][j]){D[i][j] = D[i][k] + D[k][j];if (i == j&&D[i][j]<0) {return false;}}}}}return true;}void FindAnimal(MGraph Graph){WeightType D[MaxVertexNum][MaxVertexNum];WeightType Max[MaxVertexNum];Floyd(Graph, D);for(int i=1;i<=Graph->Nv ;++i){int m = -1;for(int j=1;j<=Graph->Nv ;++j){if(i!=j&&m<D[i][j]){m = D[i][j];}if(i!=j&&D[i][j]==INFINITY1){cout << 0 << endl;return;}}Max[i] = m;}int ret = 1;for(int i = 2; i <= Graph->Nv; ++i){//cout << Max[i] << endl;if(Max[ret]>Max[i]){ret = i;}}cout << ret << " " << Max[ret] << endl;}int main(){MGraph Graph = BulidGraph();FindAnimal(Graph);delete Graph;//InFile.close();system("pause");return 0;}
阅读全文
0 0
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试(25 分)
- pta 07-图4 哈利·波特的考试 (25分) floyd
- MOOC浙大数据结构 — 07-图4 哈利·波特的考试 (25分)
- 07-图4 哈利·波特的考试 (25分)
- 7-8 哈利·波特的考试(25 分)
- 7-11 哈利·波特的考试(25 分)
- 07-图4 哈利波特的考试
- 图4 哈利·波特的考试
- 5-8 哈利·波特的考试 (25分)
- 5-8 哈利·波特的考试 (25分)
- 5-8 哈利·波特的考试 (25分)
- linux下安装软件的常用方法
- [Java] 批处理编译环境
- android软键盘回车键的点击事件处理
- 蓝桥杯 算法提高 夺宝奇兵
- TomTom高精度地图已覆盖全球21个国家38万公里
- 07-图4 哈利·波特的考试(25 分)
- http://blog.csdn.net/tanga842428/article/details/52159757深入浅出理解RPC框架和webservice
- opencv-python绘制图形
- 文件操作,及文件操作时的权限设置,快速实现文件拷贝,C语言常用IO函数
- 210. Course Schedule II
- 洛谷 P2017 [USACO09DEC]晕牛Dizzy Cows
- opencv-python实现图像的读取,显示与写入
- 三分钟读懂TT猫分布式、微服务和集群之路
- 二叉树非递归遍历实现