浙江大学数据结构MOOC-课后习题-第七讲-图4 哈利·波特的考试

题目汇总
浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024

题目描述

代码展示

照着教程视频来的,没啥好说的捏

cpp 复制代码
#include <cstdlib>
#include <iostream>

#define MAXSIZE 100
#define IFINITY 65535
typedef int vertex;
typedef int weightType;

/* 边 */
struct ENode
{
	vertex V1, V2;
	weightType weight;
};
typedef ENode* ptrToENode;
typedef ptrToENode Edge;

/* 图结点 */
struct GNode
{
	int Nv;	/* 节点数 */
	int Ne;	/* 边数 */
	weightType G[MAXSIZE][MAXSIZE];	/* 邻接矩阵 */
};
typedef GNode* ptrToGNode;
typedef ptrToGNode MGraph;

MGraph creatGraph()
{	
	vertex V, W;
	MGraph G = (MGraph)malloc(sizeof(GNode));
	G->Ne = 0;
	std::cin >> G->Nv;

	for (V = 0; V < G->Nv; V++)
	{
		for (W = 0; W < G->Nv; W++)
		{
			G->G[V][W] = IFINITY;
		}
	}
	return G;
}

void insertEdge(MGraph Graph, Edge E)
{
	Graph->G[E->V1][E->V2] = E->weight;
	Graph->G[E->V2][E->V1] = E->weight;
}
MGraph buildGraph()
{
	MGraph G = creatGraph();
	
	//插入边
	std::cin >> G->Ne;
	if (G->Ne != 0)
	{
		Edge E = (Edge)malloc(sizeof(ENode));
		for (int i = 0; i < G->Ne; i++)
		{
			std::cin >> E->V1 >> E->V2 >> E->weight;
			E->V1--;
			E->V2--;
			insertEdge(G, E);
		}
	}
	return G;
}

void floyd(MGraph Graph, weightType D[][MAXSIZE])
{
	vertex i, j, k;
	
	/* 初始化 */
	for (i = 0; i < Graph->Nv; i++)
	{
		for (j = 0; j < Graph->Nv; j++)
		{
			D[i][j] = Graph->G[i][j];
		}
	}

	for(k = 0; k < Graph->Nv; k++)
	{
		for (i = 0; i < Graph->Nv; i++)
		{
			for (j = 0; j < Graph->Nv; j++)
			{
				if ((D[i][k] + D[k][j]) < D[i][j])
					D[i][j] = D[i][k] + D[k][j];
			}
		}	
	}
}

weightType findMaxDist(MGraph Graph, weightType D[][MAXSIZE], vertex i)
{
	weightType maxDist;
	vertex j;

	maxDist = 0;
	
	for (j = 0; j < Graph->Nv; j++)
	{
		if (D[i][j] > maxDist && i != j)
			maxDist = D[i][j];
	}
	return maxDist;
}
void findAnimal(MGraph G)
{	
	
	weightType D[MAXSIZE][MAXSIZE], maxDist, minDist;
	vertex animal, i;
	

	/* 利用Floyd求出任意两点间的最短路径长度 */
	floyd(G, D);
	
	/* 找出每行中的最大值, 然后从所有最大值中找出最小值 */
	minDist = IFINITY;
	for (i = 0; i < G->Nv; i++)
	{	
		maxDist = findMaxDist(G, D, i);
		if (maxDist == IFINITY)
		{
			std::cout << "0";
			return;
		}
		if (maxDist < minDist)
		{
			minDist = maxDist;
			animal = i + 1;
		}
	}
	std::cout << animal << ' ' << minDist;
}
int main()
{
	MGraph G = buildGraph();
	findAnimal(G);
	return 0;
}

心路历程

感觉有点懈怠了...

相关推荐
菜鸡中的奋斗鸡→挣扎鸡5 小时前
滑动窗口 + 算法复习
数据结构·算法
axxy20006 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
Uu_05kkq7 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
1nullptr9 小时前
三次翻转实现数组元素的旋转
数据结构
TT哇9 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
A懿轩A9 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J10 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
汝即来归11 小时前
选择排序和冒泡排序;MySQL架构
数据结构·算法·排序算法
aaasssdddd9614 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
芳菲菲其弥章14 小时前
数据结构经典算法总复习(下卷)
数据结构·算法