首页 > 编程语言 >交个崔鹏题 6-A /c++

交个崔鹏题 6-A /c++

时间:2023-12-21 13:13:23浏览次数:32  
标签:崔鹏题 交个 int Graph ends c++ ++ edge Edges

#include<iostream> 
#define MAX 10
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef char E;
typedef struct Edge{
	E start;
	E end;
	int weight;
}*Edges;
typedef struct GraphMatrix{
	int vex,edge;
	int matrix[MAX][MAX];
	E data[MAX];
}*Graph;

Graph Create(){
	Graph g = (Graph)malloc(sizeof(GraphMatrix));
	g->vex=g->edge=0;
	memset(g->matrix,0,sizeof(g->matrix));
	return g;
}
void addVex(Graph g,E e){
	g->data[g->vex++]=e;
	
}
int getIndex(Graph g,E e){
	for(int i=0;i<g->vex;i++)
		if(g->data[i]==e)
			return i;
	return -1;
}
void addEdge(Graph g,E v1,E v2,int w,Edges e){
	int a=getIndex(g,v1);
	int b=getIndex(g,v2);
	g->matrix[a][b]=w;
	g->matrix[b][a]=w;
	
	e[g->edge].start=v1;
	e[g->edge].end=v2;
	e[g->edge].weight=w;

	g->edge++;
}

void Kruscal(Graph g){
	int vLen=g->vex;
}
int getEnds(int ends[],int i){
	while(ends[i]!=0){
		i=ends[i];
	}
	return i;
}
void Kruskal(Graph g,Edges e){
	int index=0;
	int ends[g->edge];//保存最小生成树中每个顶点的终点 
	for(int i=0;i<g->edge;i++)
		ends[i]=0;
	//创建结果数组 ,保存最终的最小生成树 Res 为Result的缩写 
	Edges edgeRes =(Edges) malloc(g->edge*sizeof(struct Edge));
	
	//按照边的权值大小排序,我已经在main里排序过了
	
	//遍历edges数组从最小边开始加,加一次判回路一次,没回路就加进来(edgeRes),有回路就换下一条

	 for(int i =0;i<g->edge;i++) {
	 	//拿到第i条边的顶点的下标start 
		int p1= getIndex(g,e[i].start);
		//拿到第i条边的顶点的下标start 
		int p2= getIndex(g,e[i].end);
		
		//获取p1顶点的在已有的最小生成树中终点是?
		int m =getEnds(ends,p1);
		//获取p2顶点的在已有的最小生成树中终点是?
		int n =getEnds(ends,p2);
		//是否构成回路
		if(m!=n) {//不构成回路 
			ends[m] =n; //设置m 在已有最小生成树的终点 
			edgeRes[index++]=e[i];
		}
	 }
	 //统计并打印最小生成树
	 int temp=0;
	  for(int i =0;i<index;i++){
	  	temp+=edgeRes[i].weight;
	  }
	  cout<<temp<<endl;
	
	
}
int cmp(const void *a, const void *b){
    return ((struct Edge *)a)->weight - ((struct Edge *)b)->weight;
}

int main(){

	int n;
	cin>>n;
	Graph graph=Create();
	Edges edges;
	edges=( Edges)malloc((n*(n-1)/2)*sizeof(struct Edge));
	for(int i=0;i<n;i++){
		char e;cin>>e;
		addVex(graph,e);
	}
		
	E v1,v2;int w;
	while(cin>>v1>>v2){
		cin>>w;
		addEdge(graph,v1,v2,w,edges);
	}
	qsort(edges,graph->edge, sizeof(Edge), cmp);
	Kruskal(graph,edges);
		
}

标签:崔鹏题,交个,int,Graph,ends,c++,++,edge,Edges
From: https://www.cnblogs.com/Happy-Eric-1/p/17918744.html

相关文章

  • C/C++语法基础目录
    目录C/C++语法基础目录前言程序语言简介三大控制结构批量数据存储模块化编程指针自定义数据类型文件面向对象封装继承多态C/C++语法基础目录前言使用过较多的教学书籍,有很多不错的书籍,但是并不是那么切合自身的教学习惯,于是此书被拉开了帷幕。本书的第一次落键是在2023年12月2......
  • 人们一般提到的安全性只涉及内存安全——但这还远远不够……而且与其他语言(包括 C++
    C++之父BjarneStroustrup:我会为全球数十亿行C++代码带来一个崭新的解决方案https://mp.weixin.qq.com/s/L8xYyR88KdHsHqyz_sQ5Sg作者|DavidCassel译者|王强策划|Tina在CppConC++会议上,这位C++的创建人明确了该编程语言中迫切需要的安全措施具体都有哪些。  ......
  • 浅谈C++类型转换函数
    reinterpret_castreinterpret_cast<newtype>(expression)将一个类型的指针转换为另一个类型的指针,它允许从一个指针转换为整数类型。voidtest01(){ chara=0; int*p=reinterpret_cast<int*>(&a); //不安全}const_cast常量const指针与普通指针之间的相互转化。如果不用......
  • Mysql以及TCP socket的C++代码
    在使用socket编写tcp的C++程序时,遇到了一个问题:那就bind冲突了,分析原因:是因为std中有bind函数,而socket中也有,但是没有报重复定义的错误,这就有一点难办了。百度了一下:发现只要使用::bind就可以调用socket的bind。下面把这个套接字socket的server端代码贴出来:staticvoid*serv......
  • C++系列三:QT代码库
    目录前言QT小记1.菜单栏、工具栏、状态栏2.自定义的对话框3.任务管理器4.链接数据库mysql,sqlite5.WidgetsGalleryExample代码学习:999.ControlsQT-For-Python1.DemoQT-Quick1.HelloWorld2.简单表单前言记录有关qt的案例。QT小记知识点:1.ui_widget.h:类的名称是Ui......
  • 《算法、C++、Linux、Android》
    ......
  • C++引用在本质上是什么,它和指针到底有什么区别?
    参考文章:https://www.bilibili.com/read/cv13541907/对于指针变量P,引用变量Q,以及变量a=10;赋值过程:P=&a;&Q=a;P=&a:将变量a的地址传给指针P。a的地址上存的值是10;P的地址上存值是a的地址;*P:指向的是存在指针P上的地址(a的地址)上的内容,即a的值10。指针P指......
  • C++中的explicit关键字
    一、简介explicit关键字可以阻止隐式转换的发生。举例:C++中只带有一个参数的构造函数,或者或者除了第一个参数外其余参数都有缺省值的多参构造函数,承担了两个角色:(1)用于构建单参数的类对象。(2)隐含的类型转换操作符。一个类A的构造函数A(inti)就是既可以用来作为构造器,......
  • C++聊天集群服务器解决客户端注销登录问题
    客户端如何处理注销登录问题?问题描述:​ 在客户端登录后进行注销选择,然后重新登录刚才注销的账号,直接卡死。注意这是概率发生,因为是主线程和子线程抢服务器发送的信息,只有子线程抢到才会发生卡死问题产生原因分析:​ 前置条件:主线程循环等待用户输入选择(第一张图是死循环,send......
  • C++ Qt开发:QItemDelegate 自定义代理组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyledItemDelegate自定义代理组件的常用方法及灵活运用。在Qt中,QStyledItemDelegate类是用于......