⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graph1.cpp

📁 图的运算
💻 CPP
字号:
#include<iostream.h>
#include"graph1.h"
void Check(int n,int& i,int& j);
void InitGMatix(adjmatrix& GA,int n)
{
	GA=new int *[n];
	int i,j;
	for(i=0;i<n;i++)
		GA[i]=new int [n];
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			if(i==j)GA[i][j]=0;
			else GA[i][j]=MaxValue;
}
void CreateMatrix(adjmatrix GA,int n, int k1,int k2)
{
	int i,j,k,e,w;
	cout<<"输入图的总边数:";
	cin>>e;
	if(k1==0 && k2==0){
		cout<<"输入"<<e<<"条无向无权边的起点和终点序号!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j;
			Check(n,i,j);
			GA[i][j]=GA[j][i]=1;
		}
	}
	else if(k1==0 && k2!=0){
		cout<<"输入"<<e<<"条无向带权边的起点和终点序号及权值!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j>>w;
			Check(n,i,j);
			GA[i][j]=GA[j][i]=w;
		}
	}
	else if(k1!=0 && k2==0){
		cout<<"输入"<<e<<"条有向无权边的起点和终点序号!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j;
			Check(n,i,j);
			GA[i][j]=1;
		}
	}
	else if(k1!=0 && k2!=0){
		cout<<"输入"<<e<<"条有向有权边的起点和终点序号及权值!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j>>w;
			Check(n,i,j);
			GA[i][j]=w;
		}
	}
}
void dfsMatrix(adjmatrix GA,bool*& visited,int i,int n)
{
	cout<<i<<' ';
	visited[i]=true;
	for(int j=0;j<n;j++)
		if(i!=j && GA[i][j]!=MaxValue && !visited[j])
			dfsMatrix(GA,visited,j,n);
}
void bfsMatrix(adjmatrix GA,bool *& visiited,int i,int n)
{
	const int MaxLength=30;
	int q[MaxLength]={0};
	int front=0,rear=0;
	cout<<i<<' ';
	visiited[i]=true;
	q[++rear]=i;
	while(front!=rear){
		front=(front+1)%MaxLength;
		int k=q[front];
		for(int j=0;j<n;j++)
		{
			if(k!=j && GA[k][j]!=MaxValue && !visiited[j]){
				cout<<j<<' ';
				visiited[j]=true;
				rear=(rear+1)%MaxLength;
				q[rear]=j;
			}
		}
	}
}
void InitGAdjoin(adjlist& GL,int n)
{
	GL=new edgenode* [n];
	for(int i=0;i<n;i++) GL[i]=NULL;
}
void CreateAdjoin(adjlist GL,int n,int k1,int k2)
{
	int i,j,k,e,w;
	cout<<"输入图的总边数;";
	cin>>e;
	if(k1==0 && k2==0){
		cout<<"输入"<<e<<"条无向无权边的起点和终点序号!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j;
			Check(n,i,j);
			edgenode* p=new edgenode;
			p->adjvex=j;p->weight=1;
			p->next=GL[i];
			GL[i]=p;
			p=new edgenode;
			p->adjvex=i;p->weight=1;
			p->next=GL[j];
			GL[j]=p;
		}
	}
	else if(k1==0 && k2!=0){
		cout<<"输入"<<e<<"条无向带权边的起点和终点序号及权值!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j>>w;
			Check(n,i,j);
			edgenode* p=new edgenode;
			p->adjvex=j;p->weight=w;
			p->next=GL[i];
			GL[i]=p;
			p=new edgenode;
			p->adjvex=i;p->weight=w;
			p->next=GL[j];
			GL[j]=p;
		}
	}
	else if(k1!=0 && k2==0){
		cout<<"输入"<<e<<"条有向无权边的起点和终点序号!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j;
			Check(n,i,j);
			edgenode* p=new edgenode;
			p->adjvex=j;p->weight=1;
			p->next=GL[i];
			GL[i]=p;
		} 
	}  
	else if(k1!=0 && k2!=0){
		cout<<"输入"<<e<<"条有向有权边的起点和终点序号及权值!"<<endl;
		for(k=1;k<=e;k++){
			cin>>i>>j>>w;
			Check(n,i,j);
			edgenode* p=new edgenode;
			p->adjvex=j;p->weight=w;
			p->next=GL[i];
			GL[i]=p;
		}
	}
}
void dfsAdjoin(adjlist GL,bool *& visited, int i,int n)
{
	cout<<i<<' ';
	visited[i]=true;
	edgenode* p=GL[i];
	while(p!=NULL){
		int j=p->adjvex;
		if(!visited[j])
			dfsAdjoin(GL,visited,j,n);
		p=p->next;
	}
}
void bfsAdjoin(adjlist GL,bool*& visited,int i,int n)
{
	const int MaxLength=30;
	int q[MaxLength]={0};
	int front=0,rear=0;
	cout<<i<<' ';
	visited[i]=true;
	q[++rear]=i;
	while(front!=rear){
		front=(front+1)%MaxLength;
		int k=q[front];
		edgenode* p=GL[k];
		while(p!=NULL)
		{
			int j=p->adjvex;
			if(!visited[j]){
				cout<<j<<' ';
				visited[j]=true;
				rear=(rear+1)%MaxLength;
				q[rear]=j;
			}
			p=p->next;
		}
	}
	
}
void Check(int n,int& i,int& j)
{
	while(1){
		if(i<0||i>=n||j<0||j>=n)
			cout<<" 输入有误,请重输!";
		else return;
		cin>>i>>j;
	}
}
void graphChange(adjmatrix GA,adjlist GL,int n)
{
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(GA[i][j]!=0 && GA[i][j]!=MaxValue){
				edgenode* p=new edgenode;
				p->adjvex=j;
				p->weight=GA[i][j];
				p->next=GL[i];
				GL[i]=p;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -