这是最基本的简历无向图邻接矩阵表示的代码:
#include<iostream> using namespace std; typedef char VertexType; typedef int EdgeType; #define MAXVEX 100 #define INFINITY 65535 typedef struct { VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes,numEdges; }MGraph; int main(MGraph *G) { int i,j,k,w; cout<<"输入定点数和边数:"<<endl; cin>>G->numVertexes>>G->numEdges; for(i=0;i<G->numVertexes;++i) cin>>G->vexs[i]; for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j) G->arc[i][j]=INFINITY; //邻接矩阵初始化 for(k=0;k<G->numEdges;++k) { cout<<"输入边(vi,vj)上的下标i、下标j和权值w:"<<endl; cin>>i>>j; G->arc[i][j]=w; G->arc[j][i]=G->arc[i][j];//由于是无向图,矩阵对称 } for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j) {cout<<G->arc[i][j];} return 0; }
编译可以通过,但是执行一步,也就是输入了定点数和边数之后,就自动停止运行了,调试的时候,到第一个for循环,就跳出对话框“Unhandled exception in Graph.exe:0xC0000005:Access Violation”,这是哪里出了问题呢?
#include<iostream> using namespace std; typedef char VertexType; typedef int EdgeType; #define MAXVEX 100 #define INFINITY 65535 typedef struct { VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes,numEdges; }MGraph; int main() { MGraph *G=new MGraph; int i,j,k,w; cout<<"输入定点数和边数:"<<endl; cin>>G->numVertexes>>G->numEdges; for(i=0;i<G->numVertexes;++i) cin>>G->vexs[i]; for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j) G->arc[i][j]=INFINITY; //邻接矩阵初始化 for(k=0;k<G->numEdges;++k) { cout<<"输入边(vi,vj)上的下标i、下标j和权值w:"<<endl; cin>>i>>j; G->arc[i][j]=w; G->arc[j][i]=G->arc[i][j];//由于是无向图,矩阵对称 } for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j) {cout<<G->arc[i][j];} return 0; }
非常感谢!
这个问题解决了之后,还有个问题:输入了顶点数和边数,比如是4和5,继续输入4个顶点v1 v2 v3 v4,按回车,之后就出现了5行这样的字:“输入边(vi,vj)上的下标i、下标j和权值w:”,接下来是很多65535,这又是怎么回事呢?
@响O(∩_∩)O:
for(i=0;i<G->numVertexes;++i) for(j=0;j<G->numVertexes;++j) {cout<<G->arc[i][j];}
这个是打印邻接矩阵的所有边,初始化时将其初始为
#define INFINITY 65535
@星空雾雨: 嗯,明白了,非常感谢您的耐心讲解!