实验六

#include<iostream.h>
#include<windows.h>
const int MaxSize=10;
template<class T> 
class MGraph
{
	public:
		MGraph(T a[],int n,int e);
		~MGraph(){}
		void DFST(int v);
		void BFST(int v);
		void NEXT();
	private:
		T vertex[MaxSize];
		int arc[MaxSize][MaxSize];
		int vertexNum,arcNum;
};
template<class T>
MGraph<T>::MGraph(T a[],int n,int e)
{
	int i,j,k;
	vertexNum=n;arcNum=e;
	for(i=0;i<vertexNum;i++)
		vertex[i]=a[i];
	for(i=0;i<vertexNum;i++)
		for(j=0;j<vertexNum;j++)
			arc[i][j]=0;
		for(k=0;k<arcNum;k++)
		{
			cout<<"请输入边的两个顶点的序号:";
			cin>>i>>j;
			arc[i][j]=1;arc[j][i]=1;
		}
		cout<<"邻接矩阵如下: \n";  
        for(i=0;i<vertexNum;i++)        
		{  
			for(j=0;j<vertexNum;j++)  
				cout<<arc[i][j]<<" ";  
			if(j%5==0)cout<<endl;}  
		cout<<"顶点次序依次为: ";  
		for(i=0;i<vertexNum;i++)   
		{  
			cout<<vertex[i]<<" ";  
		}  
		cout<<endl;
}
template<class T>
void MGraph<T>::DFST(int v)
{
	cout<<vertex[v];visited[v]=1;
	for(int j=0;j<vertexNum;j++)
		if(arc[v][j]==1&&visited[j]==0)DFST(j);
}
template<class T>
void MGraph<T>::BFST(int v)
{
	int Q[MaxSize];
	int front=-1,rear=-1;
	cout<<vertex[v];visited[v]=1;
	Q[++rear]=v;
	while(front!=rear)
	{
		v=Q[++front];
		for(int j=0;j<vertexNum;j++)
			if(arc[v][j]==1&&visited[j]==0)
			{
				cout<<vertex[j];visited[j]=1;Q[++rear]=j;
			}
	}
}
template<class T>
void MGraph<T>::NEXT()
{
	for(int i=0;i<vertexNum;i++)  
    {
		cout<<vertex[i]<<"的邻接点为: ";  
        for(int j=0;j<vertexNum;j++)  
            if(arc[i][j]==1&&visited[j]==0)  
                cout<<vertex[j]<<" ";  
    cout<<endl;}  
}
int visited[MaxSize]={0};
int main()
{
	system("color 9F");
	char ch[]={'a','b','c','d','e'};
	MGraph<char> MG(ch,5,6);
	for(int i=0;i<MaxSize;i++)
		visited[i]=0;
	cout<<"深度优先遍历序列是:";
	MG.DFST(0);
	cout<<endl;
	for(i=0;i<MaxSize;i++)
		visited[i]=0;
	cout<<"广度优先遍历序列是:";
	MG.BFST(0);
	cout<<endl;
	for(i=0;i<MaxSize;i++)  
        visited[i]=0;  
    MG.NEXT();
	cout<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值