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

📄 graph1.h

📁 1
💻 H
字号:
#include<iomanip.h>
#include<iostream.h>
class Matrix{
public:
	int MaxValue;
	int VertexNum;//--------图的顶点数
	int EdgeNum;//----------图的边数
	bool visited[50];
	char vexlist[50];//--------存储顶点信息的数组
	int  adjmatrix[50][50];//----存储邻接矩阵的数组
	bool C1;//----------判断是否带权
	bool C2;//----------判断是否无向

	void Initvisited();
	void InitMatrix();
	void CreateMatrix();//------创建邻接矩阵
	void PrintMatrix();//---------输出邻接矩阵
	void dfsMatrix(int i);//-------深度优先搜索邻接矩阵表示的图
	void bfsMatrix(int i);//-------广度优先搜索邻接矩阵表示的图
};
void Matrix::Initvisited(){
	for(int i=0;i<=50;i++)visited[i]=false;
}

void Matrix::InitMatrix(){
	char input;
	cout<<"请输入顶点个数:";
	int i;
	cin>>i;
	VertexNum=i;
	cout<<endl<<"请输入边数:";
	cin>>i;
	EdgeNum=i;
	cout<<endl;
	cout<<"是带权图吗(Y/N)?";
	cin>>input;
	if(input=='Y'||input=='y')C1=true;
	else C1=false;
	cout<<endl;
	cout<<"是无向图吗(Y/N)?";
	cin>>input;
	if(input=='Y'||input=='y')C2=true;
	else C2=false;
	cout<<endl;
	MaxValue=10000;
	for(int j=0;j<100;j++)visited[j]=false;
}

void Matrix::CreateMatrix(){
	int i,j,k,w;
	cout<<"请连续输入"<<VertexNum<<"个顶点,以空格间隔:"<<endl;
	for(i=0;i<VertexNum;i++)cin>>vexlist[i];
	for(i=0;i<VertexNum;i++){
			for(j=0;j<VertexNum;j++){
				if(i==j)adjmatrix[i][j]=0;
				else adjmatrix[i][j]=MaxValue;
			}
	}
	if(C1==true&&C2==true){
		cout<<"请输入"<<EdgeNum<<"条边(请输入两端点序号和权,以空格间隔):"<<endl;
		for(k=1;k<=EdgeNum;k++){
			cin>>i>>j>>w;
			adjmatrix[i][j]=adjmatrix[j][i]=w;
		}
	}
	if(C1==false&&C2==true){
		cout<<"请输入"<<EdgeNum<<"条边(两端点序号以空格间隔):"<<endl;
		for(k=1;k<=EdgeNum;k++){
			cin>>i>>j;
			adjmatrix[i][j]=adjmatrix[j][i]=1;
		}
	}
 if(C1==false&&C2==false){
		cout<<"请输入"<<EdgeNum<<"条边(两端点序号以空格间隔):"<<endl;
		for(k=1;k<=EdgeNum;k++){
			cin>>i>>j;
			adjmatrix[i][j]=1;
		}
	}           
if(C1==true&&C2==false){

		cout<<"请输入"<<EdgeNum<<"条边(请输入两端点序号和权,以空格间隔):"<<endl;
		for(k=1;k<=EdgeNum;k++){
			cin>>i>>j>>w;
			adjmatrix[i][j]=w;
		}
	}
}

void Matrix::PrintMatrix(){
	int i,j;
	cout<<endl;
    cout<<"顶点:"<<endl;
	cout<<setw(10);
	for(i=0;i<VertexNum;i++)cout<<vexlist[i]<<setw(4);
	cout<<endl<<endl;
	cout<<"邻接矩阵:"<<endl;
	cout<<setw(3);
	for(i=0;i<VertexNum;i++){
		for(j=0;j<VertexNum;j++){
			if(adjmatrix[i][j]==MaxValue&&C1==true)cout<<"∞"<<setw(5);
			else if(adjmatrix[i][j]==MaxValue&&C1==false)cout<<0<<setw(5);
			else cout<<adjmatrix[i][j]<<setw(5);
		}
		cout<<endl<<setw(3);
	}

}

void Matrix::dfsMatrix(int i){
	cout<<i<<' ';
	visited[i]=true;
	for (int j=0;j<VertexNum;j++){
		if(adjmatrix[i][j]!=0&&adjmatrix[i][j]!=MaxValue&&!visited[j])
			dfsMatrix(j);
	}
}

void Matrix::bfsMatrix(int i){
	for(int w=0;w<=VertexNum;w++)visited[w]=false;
	int queue[50];
	int front,rear;
	front=rear=0;
	cout<<i<<' ';
	visited[i]=true;
	queue[++front]=i;
	while(front!=rear){
		int k=queue[++rear];
		for(int j=0;j<VertexNum;j++){
			if(adjmatrix[k][j]!=0&&adjmatrix[k][j]!=MaxValue&&!visited[j]){
				cout<<j<<' ';
				visited[j]=true;
				queue[++front]=j;
			}
		}
	}
}

⌨️ 快捷键说明

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