首页 > 其他分享 >11-2打卡

11-2打卡

时间:2023-11-02 13:13:56浏览次数:24  
标签:11 vexnum arc int MAX vex edge 打卡

今天学习了prim算法最小生成树

#include<iostream>
#define MAX 1000000
using namespace std;

struct graph
{
	char* vex;
	int vexnum;
	int** arc;
};

struct Edge
{
	char vex;
	int weight;
};


//若edge[i]为0则代表已加入u集合(最小生成树集合)
Edge* initedge(graph* g, int index) {
	Edge* edge = new Edge[g->vexnum];
	for (int i = 0; i < g->vexnum; ++i) {
		edge[i].vex = g->vex[index];//edge[i].vex为起始节点,g.vex[i]为目标顶点,edge[i].weight为他们之间的权值若为0则已加入u集合
		edge[i].weight = g->arc[index][i];
	}
	return edge;
}

int getMinVex(graph* g,Edge* edge) {
	int min = MAX;
	int index;
	for (int i = 0; i < g->vexnum; ++i) {
		if (edge[i].weight && min > edge[i].weight) {
			min = edge[i].weight;
			index = i;
		}
	}
	return index;
}

void prim(graph* g) {
	Edge* edge = initedge(g, 0);
	for (int i = 0; i < g->vexnum - 1; ++i) {
		int min = getMinVex(g,edge);
		cout << 'V' << edge[min].vex << "->" << 'V' << g->vex[min] << ' ' << "weight="<<edge[min].weight << endl;
		edge[min].weight = 0;//g.vex[min]加入u集合则置min为0
		for (int j = 0; j < g->vexnum; ++j) {
			if (g->arc[min][j] < edge[j].weight && g->arc[min][j]) {
				edge[j].vex = g->vex[min];
				edge[j].weight = g->arc[min][j];
			}
		}
	}
}

void initgraph(graph*& g, int n)
{

	g->vexnum = n;
	g->vex = new char[n];
	g->arc = new int* [n];
	for (int i = 0; i < n; i++)
	{
		g->arc[i] = new int[n];
	}
}

void creatgraph(graph* g, char* vex, int* nums)
{
	for (int i = 0; i < g->vexnum; ++i)
	{
		g->vex[i] = vex[i];
	}
	for (int i = 0; i < g->vexnum; i++)
	{
		for (int j = 0; j < g->vexnum; j++)
		{
			g->arc[i][j] = *(nums + i * g->vexnum + j);
		}
	}
}

void Dfs(graph* g, int index, int* vexindex) {
	cout << g->vex[index];
	vexindex[index] = 1;
	for (int i = 0; i < g->vexnum; ++i) {
		if (g->arc[index][i] && !vexindex[i] && g->arc[index][i]!=MAX)
			Dfs(g, i, vexindex);
	}
}

//void Bfs(graph* g, int* vexindex)
//{
//	queue<int>a;
//	a.push(0);
//	cout << g->vex[0];
//	vexindex[0] = 1;
//	while (!a.empty())
//	{
//		int j = a.front();
//		a.pop();
//		for (int i = 0; i < g->vexnum; i++) {
//			if (g->arc[j][i] && !vexindex[i])
//			{
//				a.push(i);
//				cout << g->vex[i];
//				vexindex[i] = 1;
//			}
//		}
//	}
//}

int main()
{
	graph* g = new graph;
	initgraph(g, 6);
	char vex[6] = { '1','2','3','4','5','6'};
	int arc[6][6] = {
		0,6,1,5,MAX,MAX,
		6,0,5,MAX,3,MAX,
		1,5,0,5,6,4,
		5,MAX,5,0,MAX,2,
		MAX,3,6,MAX,0,6,
		MAX,MAX,4,2,6,0
	};
	creatgraph(g, vex, (int*)arc);
	int vexindex[6] = { 0 };
	prim(g);
	cout << endl;
	Dfs(g, 0, vexindex);
	//memset(vexindex, 0, sizeof(vexindex));
	//Bfs(g, vexindex);
	return 0;
}

标签:11,vexnum,arc,int,MAX,vex,edge,打卡
From: https://www.cnblogs.com/wlxdaydayup/p/17805158.html

相关文章

  • 刘铭诚:11.2美元黄金、期货原油行情走势分析及日内交易策略布局
    昨夜黄金受美元指数上涨导致下跌,低点给到1969.7一线,刘铭诚给出的防守1973-1970区域多单目前拿到1987一线,思路策略精准无误!今日周四,白盘黄金价格还是关注1992以及2000关口阻力,另外4小时布林带中轨与MA30均线粘合承压位置在1990一线,而SAR停损转向指标向下发展至1995位置,日内这两......
  • 2023-11-02 微信小程序的button的border如何清除?==》清除其伪类after即可
    给微信小程序的button的border设置为0或者none,依旧无法清除,这是因为button的border是用了伪类after来实现的,清除该伪类即可,你也可以参考我的css:.button{padding:0;margin:0;background:transparent!important;&::after{border:0;}}......
  • mysqld got signal 11
    【1】mysql实例启动故障5.7.21-》5.7.42数据库升级后,启动发现错误日志如下2023-08-10T23:05:53.463377+08:000[Warning]TIMESTAMPwithimplicitDEFAULTvalueisdeprecated.Pleaseuse--explicit_defaults_for_timestampserveroption(seedocumentationformore......
  • crypto 2023.10.31-11.05
    1.a.题目后面有"="就先猜一手base64编码,直接复制base64解码解密即可得到flagb.故直接用工具进行解密 2. a.因为是MD5加密,故直接用工具解密 3. a.因为是Url加密,故直接用工具解密 4. a.看题目像是凯撒密码,直接使用工具,并找到flag  5. a.因为key{}里面......
  • P1164-DP【橙】
    这道题让我更深入的理解了记忆化搜索的过程,既然记忆化搜索的结果要靠返回值来传递,那么记忆化搜索解决问题的必须是倒序的,即记忆化搜索是一个简化问题倒序解决的过程,普通搜索是一个复杂化问题逐步尝试并记录尝试结果的过程。特别是对于求总种数的记忆化搜索,就是把能干的事情组合起......
  • Win11长路径支持
    Win11长路径支持Win+R打开运行输入gpedit.msc  》计算机配置》管理模板=》系统=》文件系统=》双击启用Win32长路径=》选择启用 Git长路径支持管理员打开PowerShell 输入gitconfig--systemcore.longpathstrue ......
  • 11.2算法
    两数相加给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。 示例1:输入:l1=[2,4,3],l2=......
  • Win11家庭版找不到组策略
    Win11家庭版的组策略是需要手动启用的1,建议一个txt文件,键入如下内容(注意空格和换行)pushd"%~dp0"dir/bC:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum>List.txtdir/bC:\Windows\servicing\Packages\Microsoft-Windows-G......
  • 每日总结-23.11.1
    软件构造作业生成算式存入csvpackagekousuanti;importjava.util.Scanner;publicclassGongneng{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);Chutichuti=newChuti();System.out.println("请确......
  • 每日总结11.02
    学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。  Client:package实验7;publicclassClient{    publicstaticvoidmain(Stringa[]){        StudentIDstu1,stu2;        Stringid1,id2;        System.out.pr......