旅游景区管理系统(三 )prim铺设电路(MFC实现)
旅游景区管理系统
旅游路线导航
本系列为武汉某大学课设,只是学习之用
功能要求:
功能要求:
处理:根据景区景点图使用普里姆(Prim)算法构造最小生成树,设计出一套铺设线路最短,但能满足每个景点都能通电的方案。
输出:
① 需要铺设电路的道路
② 每条道路铺设电路的长度
③ 铺设电路的总长度
例子
代码块展示
//功能四:prim算法铺路
//prim和dijstra代码相似,仅少量修改
void CMFCApplication2Dlg::OnBnClickedButton4()
{
CString Information; //显示屏幕操作
CString X("长度: "), Y("\r\n"), Z(" -----> "), W("总共需要铺设: ") ,F1(") "), F2("(");
CString str; //整数中作格式转换用
int start = 0;
int dis[M]; //已访问点到未访问点的最短路径数组
int count = 2; //计数
int visit[M]; //是否被访问
int longth = 0; //总长度
//初始化
memset(dis, INF, sizeof(dis));
memset(visit, 0, sizeof(visit));
dis[start] = 0;
visit[start] = 1;
Information += "铺设的道路依次为: " + Y;
for (int j = 0; j < S.count; j++) //把所有为0值变成无穷大
{
for (int i = 0; i < S.count; i++)
if (S.mat.m[j][i] == 0)
{
S.mat.m[j][i] = INF;
}
}
Information += S.Pname[0] + Z;
for (int i = 0; i < S.count; i++) //将第一个点变为访问点
{
dis[i] = S.mat.m[start][i];
}
for (int j = 0; j < S.count; j++)
{
int mini = start;
for (int i = 0; i < S.count; i++)
{
if (visit[i] == 0 && dis[i] < dis[mini]) //寻找相邻最小点
{
mini = i;
}
}
visit[mini] = 1;
count++;
str.Format("%d", dis[mini]);
longth += dis[mini];
if (count == S.count) //修饰打印格式
{
Information += F2 + X + str + F1 + S.Pname[mini];
break;
}
else
{
Information += F2 + X + str + F1 + S.Pname[mini] + Z;
}
for (int i = 0; i < S.count; i++) //更新其余未访问的边权
{
if (dis[i] > S.mat.m[mini][i])
{
dis[i] = S.mat.m[mini][i];
}
}
}
Information += +Y + Y + W +Y;
str.Format("%d", longth);
Information += str;
SetDlgItemText(SCREEN, Information);
MessageBox("输出铺设电路成功!");
// TODO: 在此添加控件通知处理程序代码*/
}