资源简介
n个村庄之间的交通图用有向加权图表示,图中的有向边表示第i个村庄和第j个村庄之间有道路,边上的权表示这条道路的长度。现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院最近。
代码片段和文件信息
#include
#define MaxInt 10000//最大数
using namespace std;
const int MaxNumEdges=50;
const int MaxNumVertices=10; //最大顶点数
class Graph
{
private:
int vNum;//当前顶点数
int eNum;//当前边数
int Vertex[MaxNumVertices];//顶点数组
int Edge[MaxNumVertices][MaxNumVertices];//边数组
bool GetVertexPos(const int &vertexint &i);//给出顶点vertex在图中的位置
public:
Graph(const int sz= MaxNumEdges);//构造函数
bool FindVertex(const int &vertex);
bool InsertVertex(const int & vertex);//插入一个顶点vertex
bool InsertEdge(const int v1const int v2const int weight);//插入一条边(v1v2)该边上的权值为weight
void Hospital();//医院选址函数
};
Graph::Graph(const int sz): vNum(0) eNum(0)
//构造函数
{
int ne;
int nametailhead;
int weight;
for(int i=0;i for(int j=0;j {
if(i==j)
Edge[i][j]=0;//顶点到自身权值为0
else
Edge[i][j]=10000;//邻接矩阵初始化为最大值
}
printf(“请输入顶点数注意本程序最多为10个!\n“);
scanf(“%d“&n);
printf(“请依次输入顶点名称:\n“);
for(int i=0;i {
scanf(“%d“&name);
InsertVertex(name);
vNum++;
}
printf(“请输入边数:\n“);
scanf(“%d“&e);
printf(“以下输入边信息:\n“);
for(int i=0;i {
printf(“请输入第%d边头顶点:“i+1);
scanf(“%d“&head);
printf(“请输入该边尾顶点:“);
scanf(“%d“&tail);
printf(“请输入该边权值:“);
scanf(“%d“&weight);
if(!InsertEdge(headtailweight))
{
printf(“不存在该边,请重输!\n“);
continue;
}
}
}
bool Graph::FindVertex(const int& vertex)
//给出顶点vertex在图中的位置
{
for (int i = 0; i < vNum; i++)
if (vertex == Vertex[i])
return true;
return false;
}
bool Graph:: GetVertexPos(const int &vertexint &i)
//给出顶点vertex在图中的位置
{
for (i = 0; i < vNum; i++)
if (vertex == Vertex[i])
return true;
return false;
}
bool Graph::InsertVertex(const int & vertex)
//插入一个顶点vertex
{
if (FindVertex(vertex))
return false;
Vertex[vNum] = vertex;
return true;
}
bool Graph::InsertEdge(const int v1const int v2const int weight)
//插入一条边(v1v2)该边上的权值为weight
{
int k=0j=0;
if(GetVertexPos(v1k) && GetVertexPos(v2j))
{
Edge[k][j]=weight;
eNum++;
Edge[j][k]=weight;
eNum++;
return true;
}
else
return false;
}
void Graph::Hospital()
//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。
{
int kijs;
for (k=0;k for (i=0;i for (j=0;j if (Edge[i][k]+Edge[k][j] Edge[i][j]=Edge[i][k]+Edge[k][j];
int m=MaxInt; //设定m为机器内最大整数。
printf(“********************************************\n“);
//以下为求各村离医院最近的医院选址
int min=MaxInt ; //设定机器最大数作村庄间距离之和的初值。
k=0; //k设医院位置。
for (j=0;j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 124928 2009-06-08 17:24 大型作业_医院选址问题.doc
文件 3927 2009-05-18 15:20 大型作业_医院选址问题.c
----------- --------- ---------- ----- ----
128855 2
相关资源
- 数据结构--员工管理系统
- 严蔚敏清华大学数据结构和算法视频
- 数据结构——图论
- 数据结构大作业之学生管理系统代码
- ACM 竞赛常用算法与数据结构
- 数据结构课程设计学生信息管理系统
- 数据结构课程设计抽签游戏
- 稀疏矩阵和三元组的基础理论
- 数据结构 图书管理线性表
- 家庭成员的管理问题 数据结构
- 校园导航问题 数据结构
- 任意长整数加法源代码数据结构
- 校内旅游咨询课程设计报告
- 数据结构课程设计--校园最短路径
- 数据结构课设Trie树
- 数据结构课程设计--航班信息查询与检
- 数据结构 课程设计 校园最短路径问题
- 数据结构 建立二叉树二叉链表存储结
- 广东工业大学数据结构课程设计-表达
- 数据结构课程设计《通讯录的制作》
- Flash动画演示 数据结构和算法
- 山东大学软件学院2018-2019 数据结构真
- 数据结构与算法课程设计
- 安排教学计划包括代码报告
- 树和森林--清华大学课程讲义-数据结
- 19年王道408+天勤数据结构讲解视频,
- 广工《算法和高级数据结构教程课程
- 广工《算法和高级数据结构教程》
- 数据结构课程设计——静态单链表操
- 简单的职工管理系统数据结构
评论
共有 条评论