旅游景区管理系统(三 )prim铺设电路(MFC实现)

旅游景区管理系统

1.旅游景区导航
2.搜索最短路径
3.prim铺设电路
4.代码介绍和展示

旅游路线导航

本系列为武汉某大学课设,只是学习之用

功能要求:

功能要求:
处理:根据景区景点图使用普里姆(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 = 1; 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: 在此添加控件通知处理程序代码*/
}

结果展示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35307005/article/details/88065035
今日推荐