简单的图邻接矩阵表示
来源:互联网 发布: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;}