3.22Code

news2024/12/27 12:53:33

基于邻接矩阵的新顶点的增加

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct{
	int vexsNum;
	int arcsNum;
	int arcs[MAXVNUM][MAXVNUM];
	int vexs[MAXVNUM];
}AdjMatrixG;

void InitGraph(AdjMatrixG &G){
	for(int k=0;k<MAXVNUM;k++)
		G.vexs[k]=k;
	for(int i=0;i<MAXVNUM;i++){
		for(int j=0;j<MAXVNUM;j++)
			G.arcs[i][j]=0;
	}
}

void CreateGraph(AdjMatrixG &G){
	cin>>G.vexsNum>>G.arcsNum;
	if(G.vexsNum==0 && G.arcsNum==0)return;

	for(int i=1;i<=G.vexsNum;i++){
		G.arcs[0][i]=G.vexs[i];
		G.arcs[i][0]=G.vexs[i];
	}
	
	for(int i=0;i<G.arcsNum;i++){
		int a,b;
		cin>>a>>b;
		G.arcs[a][b]=G.arcs[b][a]=1;
	}
}

void InsertGraph(AdjMatrixG &G){
	int v;cin>>v;
	G.vexsNum++;
	
	G.arcs[0][G.vexsNum]=G.vexs[v];
	G.arcs[G.vexsNum][0]=G.vexs[v];
	
} 

void PrintGraph(AdjMatrixG G){
	for(int i=0;i<=G.vexsNum;i++){
		for(int j=0;j<=G.vexsNum;j++){
			cout<<G.arcs[i][j];
			if(j!=G.vexsNum)cout<<" ";
		}
		cout<<endl;
	}
}

int main(){
	while(true){
		AdjMatrixG G;
		InitGraph(G);
		CreateGraph(G);
		if(G.vexsNum==0&&G.arcsNum==0)break;
		InsertGraph(G);
		PrintGraph(G);		
	}

}

基于邻接矩阵的新边的增加

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct{
	int vexsNum;
	int arcsNum;
	int arcs[MAXVNUM][MAXVNUM];
	int vexs[MAXVNUM];
}AdjMatrixG;

void InitGraph(AdjMatrixG &G){
	for(int k=0;k<MAXVNUM;k++)
		G.vexs[k]=k;
	for(int i=0;i<MAXVNUM;i++){
		for(int j=0;j<MAXVNUM;j++)
			G.arcs[i][j]=0;
	}
}

void CreateGraph(AdjMatrixG &G){
	cin>>G.vexsNum>>G.arcsNum;
	if(G.vexsNum==0 && G.arcsNum==0)return;

	for(int i=1;i<=G.vexsNum;i++){
		G.arcs[0][i]=G.vexs[i];
		G.arcs[i][0]=G.vexs[i];
	}
	
	for(int i=0;i<G.arcsNum;i++){
		int a,b;
		cin>>a>>b;
		G.arcs[a][b]=G.arcs[b][a]=1;
	}
}

void InsertGraph(AdjMatrixG &G){
	int a,b;
	cin>>a>>b;
	
	G.arcs[a][b]=G.arcs[b][a]=1;
	
} 

void PrintGraph(AdjMatrixG G){
	for(int i=0;i<=G.vexsNum;i++){
		for(int j=0;j<=G.vexsNum;j++){
			cout<<G.arcs[i][j];
			if(j!=G.vexsNum)cout<<" ";
		}
		cout<<endl;
	}
}

int main(){
	while(true){
		AdjMatrixG G;
		InitGraph(G);
		CreateGraph(G);
		if(G.vexsNum==0&&G.arcsNum==0)break;
		InsertGraph(G);
		PrintGraph(G);		
	}

}

基于邻接矩阵的边的删除

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct{
	int vexsNum;
	int arcsNum;
	int arcs[MAXVNUM][MAXVNUM];
	int vexs[MAXVNUM];
}AdjMatrixG;

void InitGraph(AdjMatrixG &G){
	for(int k=0;k<MAXVNUM;k++)
		G.vexs[k]=k;
	for(int i=0;i<MAXVNUM;i++){
		for(int j=0;j<MAXVNUM;j++)
			G.arcs[i][j]=0;
	}
}

void CreateGraph(AdjMatrixG &G){
	cin>>G.vexsNum>>G.arcsNum;
	if(G.vexsNum==0 && G.arcsNum==0)return;

	for(int i=1;i<=G.vexsNum;i++){
		G.arcs[0][i]=G.vexs[i];
		G.arcs[i][0]=G.vexs[i];
	}
	
	for(int i=0;i<G.arcsNum;i++){
		int a,b;
		cin>>a>>b;
		G.arcs[a][b]=G.arcs[b][a]=1;
	}
}

void DeleteGraph(AdjMatrixG &G){
	int a,b;
	cin>>a>>b;
	
	G.arcs[a][b]=G.arcs[b][a]=0;
	G.arcsNum--;
} 

void PrintGraph(AdjMatrixG G){
	for(int i=0;i<=G.vexsNum;i++){
		for(int j=0;j<=G.vexsNum;j++){
			cout<<G.arcs[i][j];
			if(j!=G.vexsNum)cout<<" ";
		}
		cout<<endl;
	}
}

int main(){
	while(true){
		AdjMatrixG G;
		InitGraph(G);
		CreateGraph(G);
		if(G.vexsNum==0&&G.arcsNum==0)break;
		DeleteGraph(G);
		PrintGraph(G);		
	}

}

基于邻接矩阵的顶点的删除

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct{
	int vexsNum;
	int arcsNum;
	int arcs[MAXVNUM][MAXVNUM];
	int vexs[MAXVNUM];
}AdjMatrixG;

void InitGraph(AdjMatrixG &G){
	for(int k=0;k<MAXVNUM;k++)
		G.vexs[k]=k;
	for(int i=0;i<MAXVNUM;i++){
		for(int j=0;j<MAXVNUM;j++)
			G.arcs[i][j]=0;
	}
}

void CreateGraph(AdjMatrixG &G){
	cin>>G.vexsNum>>G.arcsNum;
	if(G.vexsNum==0 && G.arcsNum==0)return;

	for(int i=1;i<=G.vexsNum;i++){
		G.arcs[0][i]=G.vexs[i];
		G.arcs[i][0]=G.vexs[i];
	}
	
	for(int i=0;i<G.arcsNum;i++){
		int a,b;
		cin>>a>>b;
		G.arcs[a][b]=G.arcs[b][a]=1;
	}
}

void DeleteGraph(AdjMatrixG &G){
	int v;
	cin>>v;

	for(int i=v;i<=G.vexsNum;i++){
		G.arcs[0][i]=G.arcs[0][i+1];
		G.arcs[i][0]=G.arcs[i+1][0]; 
	}
	G.vexsNum--;
} 

void PrintGraph(AdjMatrixG G){
	for(int i=0;i<=G.vexsNum;i++){
		for(int j=0;j<=G.vexsNum;j++){
			cout<<G.arcs[i][j];
			if(j!=G.vexsNum)cout<<" ";
		}
		cout<<endl;
	}
}

int main(){
	while(true){
		AdjMatrixG G;
		InitGraph(G);
		CreateGraph(G);
		if(G.vexsNum==0&&G.arcsNum==0)break;
		DeleteGraph(G);
		PrintGraph(G);		
	}

}

【总结-----邻接矩阵的结构体】

——————————以下是邻接表相关的题目————————————

【总结-----邻接表的结构体】

 

基于邻接表的新结点的增加

#include<iostream>
using namespace std;

#define MAXVNUM 100

//定义顶点结构体 
typedef struct VNode{
	int data;
	struct VNode *next;
}VNode,*NodeList;

//定义邻接表结构体 
typedef struct{
	NodeList V[MAXVNUM]; //顶点数组
	int vexNum,arcNum; 
}AdjList;

void CreateGraph(AdjList &G,int vexNum,int arcNum){
	G.vexNum=vexNum;
	G.arcNum=arcNum;
	
	//初始化工作 
	for(int i=1;i<=G.vexNum;i++){
		G.V[i]=new VNode;
		G.V[i]->next=NULL;
		G.V[i]->data=i;
	}
	
	for(int i=0;i<G.arcNum;i++){
		int v1,v2;
		cin>>v1>>v2;
		NodeList p1=new VNode;
		p1->data=v2;
		//头插法 
		p1->next=G.V[v1]->next;
		G.V[v1]->next=p1;
		NodeList p2=new VNode;
		p2->data=v1;
		p2->next=G.V[v2]->next;
		G.V[v2]->next=p2; 
	} 
	
} 

//添加顶点 
void InsertVex(AdjList &G){
	int data;
	cin>>data;
	G.vexNum++;
	G.V[G.vexNum]=new VNode;
	G.V[G.vexNum]->data=data;
	G.V[G.vexNum]->next=NULL;
}

void PrintGraph(AdjList G){
	for(int i=1;i<=G.vexNum;i++){
		NodeList p=G.V[i]; 
		while(p->next){
			cout<<p->data<<" ";
			p=p->next;
		}
		cout<<p->data;
		cout<<endl;
	}
}

int main(){
	int vexNum,arcNum;
	cin>>vexNum>>arcNum;
	while(vexNum!=0 && arcNum!=0){
		AdjList G;
		CreateGraph(G,vexNum,arcNum);
		InsertVex(G);
		PrintGraph(G);
		cin>>vexNum>>arcNum;
	}
}

删除结点

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct VNode{
	int data;
	struct VNode *next;
}VNode,*NodeList;

typedef struct{
	NodeList V[MAXVNUM];
	int vexNum,arcNum;
}AdjList;

void CreateGraph(AdjList &G){

	
	//对邻接表里的顶点结点数组初始化 
	for(int i=1;i<=G.vexNum;i++){
		G.V[i]=new VNode;
		G.V[i]->data=i;
		G.V[i]->next=NULL;
	} 
	
	for(int j=0;j<G.arcNum;j++){
		int v0,v1;
		cin>>v0>>v1; //输入一条边
		NodeList p1=new VNode;p1->next=NULL; 
		p1->data=v1;
		p1->next=G.V[v0]->next;
		G.V[v0]->next=p1;
	
		NodeList p2=new VNode;p2->next=NULL;
		p2->data=v0;
		p2->next=G.V[v1]->next;
		G.V[v1]->next=p2;
	
	//完成这条边的插入 	
	}

	
}

void DeleteVex(AdjList &G){
	int v;
	cin>>v;
	for(int i=v;i<G.vexNum;i++){
		//移动数组后边的
		G.V[i]=G.V[i+1];  
	}
	for(int j=1;j<G.vexNum;j++){
		NodeList pre=G.V[j];
		NodeList p=G.V[j]->next;
		while(p){
			if(p->data==v){
				pre->next=p->next;
				G.arcNum--;
			}
			pre=p;
			p=p->next; 
		}
	}
	G.vexNum--; 
}

void PrintGraph(AdjList G){
	for(int i=1;i<=G.vexNum;i++){
		NodeList p=G.V[i];
		while(p->next){
			cout<<p->data<<" ";
			p=p->next;
		}
		cout<<p->data;
		cout<<endl;
		
	}
}

int main(){
	AdjList G;
	cin>>G.vexNum>>G.arcNum; //输入顶点和边数
	while(G.arcNum!=0 && G.vexNum!=0){
		
		CreateGraph(G);
		DeleteVex(G);
		PrintGraph(G);	
		cin>>G.vexNum>>G.arcNum;
	}

}

基于邻接表添加边

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct VNode{
	int data;
	struct VNode *next;
}VNode,*NodeList;

typedef struct{
	NodeList V[MAXVNUM];
	int vexNum,arcNum;
}AdjList;

void CreateGraph(AdjList &G){

	
	//对邻接表里的顶点结点数组初始化 
	for(int i=1;i<=G.vexNum;i++){
		G.V[i]=new VNode;
		G.V[i]->data=i;
		G.V[i]->next=NULL;
	} 
	
	for(int j=0;j<G.arcNum;j++){
		int v0,v1;
		cin>>v0>>v1; //输入一条边
		NodeList p1=new VNode;p1->next=NULL; 
		p1->data=v1;
		p1->next=G.V[v0]->next;
		G.V[v0]->next=p1;
	
		NodeList p2=new VNode;p2->next=NULL;
		p2->data=v0;
		p2->next=G.V[v1]->next;
		G.V[v1]->next=p2;
	
	//完成这条边的插入 	
	}

	
}

void DeleteVex(AdjList &G){
	int v;
	cin>>v;
	for(int i=v;i<G.vexNum;i++){
		//移动数组后边的
		G.V[i]=G.V[i+1];  
	}
	for(int j=1;j<G.vexNum;j++){
		NodeList pre=G.V[j];
		NodeList p=G.V[j]->next;
		while(p){
			if(p->data==v){
				pre->next=p->next;
				G.arcNum--;
			}
			pre=p;
			p=p->next; 
		}
	}
	G.vexNum--; 
}

void InsertArc(AdjList &G){
	int v0,v1;
	cin>>v0>>v1;
	G.arcNum++;
	
	NodeList V0=new VNode;V0->next=NULL;
	V0->data=v0;
	V0->next=G.V[v1]->next;
	G.V[v1]->next=V0; 
	NodeList V1=new VNode;V1->next=NULL;
	V1->data=v1;
	V1->next=G.V[v0]->next;
	G.V[v0]->next=V1;
}

void PrintGraph(AdjList G){
	for(int i=1;i<=G.vexNum;i++){
		NodeList p=G.V[i];
		while(p->next){
			cout<<p->data<<" ";
			p=p->next;
		}
		cout<<p->data;
		cout<<endl;
		
	}
}

int main(){
	AdjList G;
	cin>>G.vexNum>>G.arcNum; //输入顶点和边数
	while(G.arcNum!=0 && G.vexNum!=0){
		
		CreateGraph(G);
		InsertArc(G);
		PrintGraph(G);	
		cin>>G.vexNum>>G.arcNum;
	}

}

基于邻接表删除边

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct VNode{
	int data;
	struct VNode *next;
}VNode,*NodeList;

typedef struct{
	NodeList V[MAXVNUM];
	int vexNum,arcNum;
}AdjList;

void CreateGraph(AdjList &G){

	
	//对邻接表里的顶点结点数组初始化 
	for(int i=1;i<=G.vexNum;i++){
		G.V[i]=new VNode;
		G.V[i]->data=i;
		G.V[i]->next=NULL;
	} 
	
	for(int j=0;j<G.arcNum;j++){
		int v0,v1;
		cin>>v0>>v1; //输入一条边
		NodeList p1=new VNode;p1->next=NULL; 
		p1->data=v1;
		p1->next=G.V[v0]->next;
		G.V[v0]->next=p1;
	
		NodeList p2=new VNode;p2->next=NULL;
		p2->data=v0;
		p2->next=G.V[v1]->next;
		G.V[v1]->next=p2;
	
	//完成这条边的插入 	
	}

	
}

void DeleteVex(AdjList &G){
	int v;
	cin>>v;
	for(int i=v;i<G.vexNum;i++){
		//移动数组后边的
		G.V[i]=G.V[i+1];  
	}
	for(int j=1;j<G.vexNum;j++){
		NodeList pre=G.V[j];
		NodeList p=G.V[j]->next;
		while(p){
			if(p->data==v){
				pre->next=p->next;
				G.arcNum--;
			}
			pre=p;
			p=p->next; 
		}
	}
	G.vexNum--; 
}

void InsertArc(AdjList &G){
	int v0,v1;
	cin>>v0>>v1;
	G.arcNum++;
	
	NodeList V0=new VNode;V0->next=NULL;
	V0->data=v0;
	V0->next=G.V[v1]->next;
	G.V[v1]->next=V0; 
	NodeList V1=new VNode;V1->next=NULL;
	V1->data=v1;
	V1->next=G.V[v0]->next;
	G.V[v0]->next=V1;
}

void DeleteArc(AdjList &G){
	int v0,v1;
	cin>>v0>>v1;
	G.arcNum--;
	NodeList pre=G.V[v0];
	NodeList p=G.V[v0]->next;
	while(p){
		if(p->data==v1){
			pre->next=p->next;
		}
		pre=pre->next;
		p=p->next;
	}
	
	pre=G.V[v1];
	p=G.V[v1]->next;
	while(p){
		if(p->data==v0){
			pre->next=p->next;
		}
		pre=pre->next;
		p=p->next;
	}
}

void PrintGraph(AdjList G){
	for(int i=1;i<=G.vexNum;i++){
		NodeList p=G.V[i];
		while(p->next){
			cout<<p->data<<" ";
			p=p->next;
		}
		cout<<p->data;
		cout<<endl;
		
	}
}

int main(){
	AdjList G;
	cin>>G.vexNum>>G.arcNum; //输入顶点和边数
	while(G.arcNum!=0 && G.vexNum!=0){
		
		CreateGraph(G);
		DeleteArc(G);
		PrintGraph(G);	
		cin>>G.vexNum>>G.arcNum;
	}

}

基于邻接表的深度遍历

【总结】并没有定义额外的数据结构,而是巧妙地定义了一个Stack数组和top指针。每访问到一个点就入栈,然后出栈,找到最后一个邻接点,把那个点入栈

1.每次入栈之时==访问到它了,cout

2.记得用vis数组标记每个点是否被访问过

#include<iostream>

using namespace std;

#define MAXVNUM 100

typedef struct VNode{
	int data;
	struct VNode *next;
}VNode,*NodeList;

typedef struct{
	NodeList V[MAXVNUM];
	int vexNum,arcNum;
}AdjList;

void CreateGraph(AdjList &G){

	
	//对邻接表里的顶点结点数组初始化 
	for(int i=1;i<=G.vexNum;i++){
		G.V[i]=new VNode;
		G.V[i]->data=i;
		G.V[i]->next=NULL;
	} 
	
	for(int j=0;j<G.arcNum;j++){
		int v0,v1;
		cin>>v0>>v1; //输入一条边
		NodeList p1=new VNode;p1->next=NULL; 
		p1->data=v1;
		p1->next=G.V[v0]->next;
		G.V[v0]->next=p1;
	
		NodeList p2=new VNode;p2->next=NULL;
		p2->data=v0;
		p2->next=G.V[v1]->next;
		G.V[v1]->next=p2;
	
	//完成这条边的插入 	
	}

	
}

bool sign[MAXVNUM]; //用来标记每个顶点是否被访问过

void DFS(AdjList G,int v){
	int top=0;
	int vis[MAXVNUM],Stack[MAXVNUM];
	for(int i=0;i<=G.vexNum;i++)
		vis[i]=0;//一开始所有点都未访问
	//访问到v 
	cout<<v;//一遇到这个点就输出这个点
	Stack[top]=v;
	top++;
	vis[v]=1; 
	while(top>0){
		int flag=0;
		NodeList p=G.V[Stack[top-1]];
		while(p){
			if(!vis[p->data]){
				flag=p->data;
			}
			p=p->next;
		}
		//通过以上循环,找到了栈顶元素的第一个没访问过的邻接点
		if(flag==0)top--; //没找到邻接点,top--就相当于出栈v了
		else{
			cout<<" "<<flag;
			Stack[top]=flag;
			vis[flag]=1;
		} 
	}
	cout<<endl;
	
}

void PrintGraph(AdjList G){
	for(int i=1;i<=G.vexNum;i++){
		NodeList p=G.V[i];
		while(p->next){
			cout<<p->data<<" ";
			p=p->next;
		}
		cout<<p->data;
		cout<<endl;
		
	}
}

int main(){
	AdjList G;
	cin>>G.vexNum>>G.arcNum; //输入顶点和边数
	while(G.arcNum!=0 && G.vexNum!=0){
		
		CreateGraph(G);
		int v;cin>>v;
		DFS(G,v);	
		cin>>G.vexNum>>G.arcNum;
	}

}

最长的最短路径的求解【一定要结合3.21的迪杰斯特拉熟练一点!!】

#include<iostream>
using namespace std;

#define MVNUM 100
#define MaxInt 999

typedef struct{
	int arcNum;
	int vexNum;
	int arc[MVNUM][MVNUM];
	int vex[MVNUM];
}Graph;
 
void InitGraph(Graph &G){
	for(int i=0;i<MVNUM;i++)
		G.vex[i]=i+1; //0下标处存的顶点名叫1这样 
	for(int i=1;i<=MVNUM;i++){
		for(int j=1;j<=MVNUM;j++){
			G.arc[i-1][j-1]=MaxInt;
			G.arc[i-1][i-1]=0; //到自己的距离是0 
		}
	}
}

void CreateGraph(Graph &G){
	//输入边 
	for(int cnt=0;cnt<G.arcNum;cnt++){
		int v0,v1;
		int w;
		cin>>v0>>v1>>w;
		
		G.arc[v0-1][v1-1]=G.arc[v1-1][v0-1]=w;
	} 
}

void Dijkstra(Graph G){
	int S[G.vexNum]; //只有 0(不在S集合) 1(在S集合)两个值 
	int D[G.vexNum];
	int v;cin>>v;
	//对S和D进行初始化 
	for(int i=1;i<=G.vexNum;i++){
		S[i-1]=0;
		D[i-1]=G.arc[i-1][v-1];
	} 
	S[v-1]=1;
	D[v-1]=0;
	//要找剩下n-1个结点到v的最短路径 
	for(int i=0;i<G.vexNum-1;i++){
		int nowMin=MaxInt;//找到这一遍遍历的最短路径
		int w=0;//找到离v最近的点w 
		for(int j=1;j<=G.vexNum;j++){
			if(!S[j-1] && D[j-1]<nowMin){
				w=j;
				nowMin=D[j-1]; 
			}
		} 
		S[w-1]=1;
		for(int j=1;j<=G.vexNum;j++){
			if(!S[j-1] && D[w-1]+G.arc[w-1][j-1]<D[j-1]){
				D[j-1]=D[w-1]+G.arc[w-1][j-1];
			}
		}
	}
	 int myMax=0; int myV=0;
	for(int i=1;i<=G.vexNum;i++){
		if(D[i-1]>myMax){
			myMax=D[i-1];
			myV=i;
		}
		
	}
	cout<<myV<<endl;
	cout<<myMax<<endl;
}

void Show(Graph G){
	for(int i=1;i<=G.vexNum;i++){
		for(int j=1;j<=G.vexNum;j++)
			cout<<G.arc[i][j]<<" ";
		cout<<endl;
	}
}

int main(){
	while(true){
		Graph G;
		InitGraph(G);
		cin>>G.vexNum>>G.arcNum;
		if(G.arcNum ==0 && G.vexNum==0)break;
		CreateGraph(G);
		Dijkstra(G);	
	}
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1538383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webgl浏览器渲染设置

在浏览器中程序图形化webgl渲染时&#xff0c;有时候发现代码没有问题&#xff0c;但是就是无法渲染或者渲染报错&#xff0c;此时可以尝试如下的设置&#xff1a; 通过在chrome浏览器输入chrome&#xff1a;//flags打开扩展 设置一&#xff08;webgl开发者扩展&#xff09; 设…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层&#xff08;数据链路层功能概述&#xff09; 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容&#xff0c;今天开始我们要进入数据链路层的学习&#xff0c;如果有小伙伴对物理层的内容感兴趣的话&#…

Xilinx FPGA 远程升级时bin和bit文件使用注意

以Spartan-6 ISE开发环境为例。 ISE开发环境支持生成bit和bin格式的程序文件&#xff0c;可以在生成选项进行配置&#xff1a; 把生成的bit文件和bin文件进行二进制比较&#xff0c;发现bit比bin文件头部多了一些内容&#xff08;头部信息&#xff09;&#xff0c;剩余部分完…

苹果电脑不能删除移动硬盘文件 苹果电脑移动硬盘只读模式如何更改 移动硬盘文件或目录损坏且无法读取怎么办

当我们将移动硬盘插入苹果电脑后&#xff0c;发现无法对移动硬盘中的文件进行编辑该怎么办&#xff1f;相信有不少网友遇到过这类情况。苹果电脑不能删除移动硬盘文件&#xff0c;或无法拷贝硬盘里的文件。今天我为大家解决苹果电脑移动硬盘只读模式如何更改的问题&#xff0c;…

GraphPad Prism 10:一站式数据分析解决方案

GraphPad Prism 10是一款功能强大的数据分析和可视化软件&#xff0c;广泛应用于生命科学研究、医学、生物、化学等多个领域。以下是对其详细功能的介绍&#xff1a; 首先&#xff0c;GraphPad Prism 10具有出色的数据可视化功能。它支持各种类型的图表和图形&#xff0c;包括…

C++ 侯捷 程序设计(Ⅱ)兼谈对象模型 笔记

Conversion function 转换函数 侯捷老师使用分数 Fraction举例&#xff0c;分数理应可以被看作是小数 提供了Fraction类对象一个转换为double的方法&#xff0c;当碰到需要转换为double的情况下&#xff0c;会调用该方法。 黄色的就是转换函数&#xff0c;没有return type&am…

高手勿入:连问chatGPT九个问题,解决个简单前端问题,无剪辑。

将layui弹窗button默认文字&#xff1a;确定&#xff0c;修改为其他文字&#xff0c;就这么个简单问题&#xff0c;把前端妹子&#xff08;新手&#xff09;难坏了&#xff0c;向我求助&#xff0c;我没有像以往一样直接给答案&#xff0c;而是以新手的方式求助chatgpt&#xf…

Vue3快速上手(十七)Vue3之状态管理Pinia

一、简介 Pinia官网:https://pinia.vuejs.org/zh/ 从官网截图里可以直接看到,pinia是一个vuejs的状态(数据)管理工具。功能性同vuex。logo是小菠萝。它是一个集中式状态管理工具。就是将多个组件共用的数据管理起来,重复利用。有点类似缓存的意思。 二、Pinia环境搭建 …

vCenter 6.5为虚拟机添加GPU直通

参考&#xff1a;Dell文档 如何为GPU直通启用VMware虚拟机。 | Dell 中国

【计算机视觉】Gaussian Splatting源码解读补充(一)

本文旨在补充gwpscut创作的博文学习笔记之——3D Gaussian Splatting源码解读。 Gaussian Splatting Github地址&#xff1a;https://github.com/graphdeco-inria/gaussian-splatting 论文地址&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gauss…

redis功能点

一、redis简介 概述 Redis 是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串、列表、集合、散列表、有序集合。 Redis 支持很…

深入理解指针03

1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针char*; ⼀般使⽤: int main(){char ch w;char *pc &ch;*pc w;return 0;} 还有⼀种使⽤⽅式如下: int main() {const char* pstr "hello world";//这⾥是把⼀个字符串放到pstr指针变量⾥了…

【并查集专题】【蓝桥杯备考训练】:网络分析、奶酪、合并集合、连通块中点的数量、格子游戏【已更新完成】

目录 1、网络分析&#xff08;第十一届蓝桥杯省赛第一场C A组/B组&#xff09; 2、奶酪&#xff08;NOIP2017提高组&#xff09; 3、合并集合&#xff08;模板&#xff09; 4、连通块中点的数量&#xff08;模板&#xff09; 5、格子游戏&#xff08;《信息学奥赛一本通》…

win10下自由切换多版本JDK操作

1.在window 系统变量 path路径追加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 2.下载多版本jdk zip文件解压到到C:\Program Files\Java\目录下 3.定义切换Java版本的bat文件,内容如下 @echo off @echo -------------------welcome to use Java version switch service------------…

设计模式 之 简单工厂模式+工厂模式

简单工厂模式 创建一个工厂类&#xff0c;对实现了同一个接口的多个类进行实例的创建。 //抽象类 人 public abstract class HuMan {public abstract void Talk(); } //黑人实现类 public class BlackHuman : HuMan {public override void Talk(){Console.WriteLine("I a…

python的ITS 信息平台的设计与实现flask-django-nodejs-php

第二&#xff0c;陈列说明该系统实现所采用的架构、系统搭建采用的服务器、系统开发环境和使用的工具&#xff0c;以及系统后台采用的数据库。 最后&#xff0c;对系统进行全面测试&#xff0c;主要包括功能测试、查询性能测试、安全性能测试。 分析系统存在的不足以及将来改进…

新材料正在加速金属3D打印的应用步伐

在金属3D打印领域&#xff0c;材料性能是影响工件综合表现的关键因素&#xff0c;如强度、硬度、耐腐蚀性、抛光性能以及导热性能等&#xff0c;都与材料息息相关&#xff0c;好的材料是推动金属3D打印向更多领域应用的基础。 在这一背景下&#xff0c;上海毅速新材料推出的多款…

二十二 超级数据查看器 讲解稿 其他高级功能

二十二 超级数据查看器 讲解稿 其他高级功能 ​​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 ​ 这节课我们讲超级数据查看器高级功能2&#xff0c;讲的是设置密码以外的其他功能。 进入高级功能&#xff0c;先讲一下列表样…

【MySQL】理解关系型数据库&数据的数据模型

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

优化选址问题 | 基于节约算法求解考虑碳排放及带时间窗的物流选址问题附matlab代码

目录 问题代码问题 节约算法(Savings Algorithm)通常用于解决车辆路径问题(Vehicle Routing Problem, VRP),特别是当需要考虑如何有效地组织车辆的路线以最小化总行驶距离时。然而,当问题扩展到包括碳排放和带时间窗的物流选址问题时,算法需要相应的调整。 在这个扩展…