为新建医院选址
来源:互联网 发布:购买域名的常用运营商 编辑:程序博客网 时间:2024/04/30 02:11
#include <iostream>
using namespace std;
template <class ElemType>
struct graph
{
int vexnum;
int arcnum;
ElemType *vex;
int **AdjMatrix;
};
template <class ElemType>
void CreateUDN(graph<ElemType> &G)
{
cout << "输入图的顶点数和边数:" << endl;
cin >> G.vexnum >> G.arcnum;
ElemType v1,v2;
int i,j,m,n,weight;
G.vex = (ElemType *)malloc(G.vexnum * sizeof(ElemType));
G.AdjMatrix = (int **)malloc(G.vexnum * sizeof(int *));
for(i = 0;i < G.vexnum;i++)
G.AdjMatrix[i] = (int *)malloc(G.vexnum * sizeof(int));
for(i = 0;i < G.vexnum;i++)
for(j = 0;j < G.vexnum;j++)
G.AdjMatrix[i][j] = INT_MAX;
cout << "输入各顶点表示的含义(字母与数字均可):" << endl;
for(i = 0;i < G.vexnum;i++)
cin >> G.vex[i];
cout << "输入无向图各条边依附的两点及权值:" << endl;
for(i = 0;i < G.arcnum;i++)
{
cin >> v1 >> v2 >> weight;
for(j = 0;j < G.vexnum;j++)
{
if(v1 == G.vex[j]) m = j;
if(v2 == G.vex[j]) n = j;
}
G.AdjMatrix[m][n] = G.AdjMatrix[n][m] = weight;
}
}
template <class ElemType>
int * Shortestpath_DIJ(graph<ElemType> G,int v)
{
int *path = (int *)malloc(G.vexnum * sizeof(int));
bool *visited = (bool *)malloc(G.vexnum * sizeof(bool));
int i,j,k,min;
for(i = 0;i < G.vexnum;i++)
{
path[i] = G.AdjMatrix[v][i];
visited[i] = false;
}
path[v] = 0;visited[v] = true;
for(i = 1;i < G.vexnum;i++)
{
min = INT_MAX;
for(j = 0;j < G.vexnum;j++)
if(!visited[j] && path[j] < min)
{
min = path[j];
k = j;
}
visited[k] = true;
for(j = 0;j < G.vexnum;j++)
if(!visited[j] && G.AdjMatrix[k][j] < INT_MAX && path[k] + G.AdjMatrix[k][j] < path[j])
path[j] = path[k] + G.AdjMatrix[k][j];
}
free(visited);
return path;
}
template <class ElemType>
void Solveplan(graph<ElemType> G)
{
CreateUDN(G);
int i,j,k,min;
int **path = (int **)malloc(G.vexnum * sizeof(int *));
int *max = (int *)malloc(G.vexnum * sizeof(int));
for(i = 0;i < G.vexnum;i++)
path[i] = (int *)malloc(G.vexnum * sizeof(int));
for(i = 0;i < G.vexnum;i++)
{
path[i] = Shortestpath_DIJ(G,i);
max[i] = 0;
for(j = 0;j < G.vexnum;j++)
if(path[i][j] > max[i]) max[i] = path[i][j];
}
min = INT_MAX;
for(i = 0;i < G.vexnum;i++)
if(max[i] < min)
{min = max[i];k = i;}
cout << "医院建在" << G.vex[k] << "处符合题意!" << endl;
cout << "医院到各村庄的最短路径如下:" << endl;
for(i = 0;i < G.vexnum;i++)
if(i != k)
cout << G.vex[k] << "->" << G.vex[i] << " " << path[k][i] << endl;
for(i = 0;i < G.vexnum;i++)
free(path[i]);
free(path);
free(max);
}
int main()
{
graph<char> G;
Solveplan(G);
return 0;
}
- 为新建医院选址
- 医院选址问题
- 数据结构课程设计(医院选址)代码
- 选址
- 成功开店选址三大法宝---专家为你支招
- 成功开店选址三大法宝---专家为你支招
- 为Linux新建用户
- 医院
- 医院
- 用医院为例笑谈IT企业类型
- linunx为weblogic新建domain
- 为新建文本文件创建快捷方式
- 为新建程序分配TCODE
- 新建json转化为string
- 何为莆田系医院?我们怎样判别莆田系医院?
- 便利店选址
- 仓库选址
- 基站选址
- 运用 Range 对象处理 Word 文档内容
- 用Flex调用SWF查看PDF (转载)
- 创建超链接及样式设置
- PHP不变的一些经典类
- Java中怎样判断一个字符串是否是数字???
- 为新建医院选址
- meiyisi
- 图的C++关键路径代码
- nginx 代理模式下,获取客户端真实IP
- lighttpd获取nginx代理客户端真实IP
- TSP的动态规划算法
- WinCE BSP中的Dirs文件和Sources文件
- 《DON’T MAKE ME THINK》读书笔记
- Oracle SQL Trace使用实例