资源简介
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
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- Fundamentals of Data Structure in C
- 北京邮电大学数据结构历年考研真题
评论
共有 条评论