简单的图邻接矩阵表示

来源:互联网 发布:sql特殊字符 编辑:程序博客网 时间:2024/05/13 11:23
#include<iostream>using namespace std;#define MaxNode 30#define MaxEdge 40class Graph1{      private:              int a[30];        //顶点表              int b[MaxNode][MaxNode];      //邻接矩阵              int numnode,numedge,maxnode;      public:              Graph1(int sz=MaxNode);              ~Graph1() { delete a; delete b;}         //delete的用法,删除new??              int GetValue(int i);           //取第i个顶点的值              int GetWeight(int x,int y);       //取两点间的权值              int GetFirstNeighbor(int i);         //取顶点i的第一个邻接顶点              int GetNextNeighbor(int x,int y);     //取顶点x的邻接顶点的下一个邻接顶点              bool InsertNode(int i);              //插入顶点               bool InsertEdge(int x,int y,int edge);         //插入xy边              bool display();};Graph1::Graph1(int sz){        maxnode=sz;        // new 开辟数组时开辟的是指针        int i,j;       for(i=0;i<maxnode;++i)       for(j=0;j<maxnode;++j)       b[i][j]=0;       for(int k=0;k<maxnode;++k)       a[k]=0;       numnode=0;numedge=0;}int Graph1::GetValue(int i){       if(a[i]>0)       return a[i];       return 0;}int Graph1::GetWeight(int x,int y){      if(b[x][y]>0&&x<maxnode&&y<maxnode)      return b[x][y];      return 0;}int Graph1::GetFirstNeighbor(int i){      int j;      for(j=0;j<maxnode;++j)      if(b[i][j]>0&&i<maxnode)      return j;      return 0;}int Graph1::GetNextNeighbor(int x,int y){      for(int k=y+1;k<maxnode;++k)      if(b[x][k]>0)      return k;      return 0;}bool Graph1::InsertNode(int i){    if(numnode==maxnode) return false;    a[numnode++]=i;    return true;}bool Graph1::InsertEdge(int x,int y,int edge){     if(numedge<40&&numnode<maxnode-2)     { b[x][y]=b[y][x]=edge; numedge++;}      return true;     return false;}          bool Graph1::display(){     cout<<"图中的顶点数"<<numnode<<endl;     cout<<"图中的边数"<<numedge<<endl;     for(int i=0;i<numnode;i++)     for(int j=0;j<numnode;++j)     {      if(b[a[i]][a[j]]>0)      {      int w=b[a[i]][a[j]];      cout<<"顶点("<<a[i]<<","<<a[j]<<")"<<" 权值"<<w<<endl;      }     }} int main(){    Graph1 G(10);    int n;    cout<<" 请输入顶点的个数"<<endl;     cin>>n;    int k;    cout<<"请输入顶点信息!"<<endl;     for(int i=0;i<n;++i)    {            cin>>k;            G.InsertNode(k);    }    cout<<"请输入添加边的条数"<<endl;    int num;    cin>>num;    cout<<"请输入边的信息,依次为顶点 顶点 权值"<<endl;    int x,y,w;    for(int j=0;j<num;++j)    {     cin>>x>>y>>w;     G.InsertEdge(x,y,w);    }     G.display();    system("pause");    return 0;}

原创粉丝点击