首页 新闻 会员 周边 捐助

C++无向图的邻接矩阵

0
悬赏园豆:15 [已解决问题] 解决于 2015-09-28 20:56
这是最基本的简历无向图邻接矩阵表示的代码:

#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”,这是哪里出了问题呢?

c++
响^_^的主页 响^_^ | 初学一级 | 园豆:110
提问于:2012-10-19 10:36
< >
分享
最佳答案
1
#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;                         
}
收获园豆:15
星空雾雨 | 菜鸟二级 |园豆:311 | 2012-10-19 11:28

非常感谢!

这个问题解决了之后,还有个问题:输入了顶点数和边数,比如是4和5,继续输入4个顶点v1 v2 v3 v4,按回车,之后就出现了5行这样的字:“输入边(vi,vj)上的下标i、下标j和权值w:”,接下来是很多65535,这又是怎么回事呢?

响^_^ | 园豆:110 (初学一级) | 2012-10-19 14:36

@响O(∩_∩)O: 

for(i=0;i<G->numVertexes;++i)
          for(j=0;j<G->numVertexes;++j)
          {cout<<G->arc[i][j];}
这个是打印邻接矩阵的所有边,初始化时将其初始为
#define INFINITY 65535
星空雾雨 | 园豆:311 (菜鸟二级) | 2012-10-19 18:42

@星空雾雨: 嗯,明白了,非常感谢您的耐心讲解!

响^_^ | 园豆:110 (初学一级) | 2012-10-19 21:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册