65,210
社区成员
发帖
与我相关
我的任务
分享#include <cassert>
#include <iostream>
using namespace std;
const int MaxNumv=50;
const int MaxNume=50;
template<class T>
class Seqlist{
public:
Seqlist(int Maxsize=50);
~Seqlist(){delete[] data;}
int Find(T &x)const;
int Insert(const T &x); //一般引用能用const就用。
int IsEmpty(){return last==-1;}
int IsFull(){return last==Maxsize-1;}
T Get(int i){return i<0||i>last?NULL:data[i];}
void printf();
void Remove(int i); //删除一个节点
T *data;
int Maxsize;
int last;
};
template <class T>
Seqlist<T>::Seqlist(int sz){
last=-1;
Maxsize=sz;
data=new T[Maxsize];
assert(data!=0);
}
template<class T>
int Seqlist<T>::Find(T &x)const{
for(int i=0;i<=last;i++)
if(data[i]==x) return 1;
return 0;
}
template <class T>
int Seqlist<T>::Insert(const T &x){
if(!IsFull())
{
data[last+1]=x;
last=last+1;
return 1;
}
return 0;
}
template<class T>
void Seqlist<T>::Remove(int i)//删除一个节点
{ assert(0<=i&&i<=last)
for (int j=i;j<last;j++)
{data[j]=data[j+1];
}
last=last-1;
}
template <class T>
void Seqlist<T>::printf(){
if (!IsEmpty())
{
for (int i=0;i<=last;i++)
cout<<data[i];
}
}
template<class T,class DistType >
class Graph
{
private:
//不能在派生类中初始化对象,在派生类构造函数中初始化
Seqlist<T> Verlist;
DistType Endge[50][50];
int currentEndge;
public:
Graph(int sz=MaxNume);//构造函数
int Findv(const T&verter){return Verlist.Find(T&verter);}//在图中寻找该顶点
int GraphEmpty()const{return Verlist.IsEmpty();}//判断图空否
int GraphFull()const{return Verlist.IsFull()||currentEndge==MaxNume;}
int NumberOfv(){return Verlist.last+1;}
int NumberOfe(){return currentEndge;}
T Getv(int i){ return i>=0&&i<=Verlist.last?Verlist.data[i]:NULL;}//取顶点i
DistType Getweight(int v1,int v2);//取边的权
void InsertV(const T & vertex);//插入一个顶点
void InsertE(int v1,int v2,DistType weight);//插入一条权为weight的边
void RemoveV(int v);//在图中删除顶点和它关联的边
void RemoveE(int v1,int v2);//删除一条边
void CheckGraph();//遍历该图
};
template<class T,class DistType>
Graph<T,DistType>::Graph(int sz):Verlist(50){
for (int i=0;i<sz;i++)
for (int j=0;j<sz;j++)
{
Endge[i][j]=0;
}
currentEndge=0;
}
template<class T,class DistType>
DistType Graph<T,DistType>::Getweight(int v1,int v2)
{
if(v1!=-1&&v2!=-1) return Endge[v1][v2];
else return 0;
}
template<class T,class DistType>
void Graph<T,DistType>::InsertV(const T & vertex)
{
Verlist.Insert(vertex);
}
template<class T,class DistType>
void Graph<T,DistType>::InsertE(int v1,int v2,DistType weight)
{
if (Endge[v1][v2]==0) Endge[v1][v2]=weight;
}
template<class T,class DistType>
void Graph<T,DistType>::RemoveE(int v1,int v2)
{
Endge[v1][v2]=0;
cout<<"该边已删除";
}
template<class T,class DistType>
void Graph<T,DistType>::RemoveV(int v)
{
Verlist.Remove();
for (int col=0;col<=Verlist.last;col++)
{
Endge[v][col]=0;
Endge[col][v]=0;
}
Endge[v][v]=200000;
}
template<class T,class DistType>
void Graph<T,DistType>::CheckGraph(){
Verlist.printf();
for (int i=0;i<=Verlist.last;i++)
for(int j=0;j<=Verlist.last;j++)
{
if(Endge[i][j]!=0)
cout<<Verlist.data[i]<<Verlist.data[j];
cout<<endl;
}
}
int main()
{
Seqlist<char> ;
Graph<char,int> graph1(5);
cout<<"请输入要加入的顶点";
char x;
cin>>x;
graph1.InsertE(1,2,3);
graph1.InsertV(x);// 为什么加这个语句后就有错误??
// 因为函数参数不匹配,你定义InsertV就用了const,而Seqlist却没用。
// 帮你改了
// 非const&可以传给const&,const&不可以传给非const&。
return 0;
}