向高手请教:关于无向图的编码的问题!

dreamzhouwei 2008-11-11 03:03:31
我写了一个图的编码的程序,但不知道哪里出错了,就是不能运行,请大家帮忙,谢谢!
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20//最大顶点的个数
int Visited[MAX_VERTEX_NUM];
typedef struct ArcCell{
int adj;
char* info;//弧的相关信息
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
char vex[MAX_VERTEX_NUM];//顶点向量
AdjMatrix arcs;//邻接矩阵
int vexnum,arcnum;//顶点数,弧数
}MGraph;
int LocateVex(MGraph G,char v1)//查找v1在图G中的位置
{
for(int i=0;i<G.vexnum;i++)
if(G.vex[i]==v1)
break;
if(i>=G.vexnum)
cout<<"ERROR!"<<endl;
else
return i;
}
void CreatUDG(MGraph &G)//采用数组表示法构造无向图G
{
cout<<"请输入您要创建的无向图的顶点的个数:";
cin>>G.vexnum;
cout<<"请输入您要创建的无向图的弧的个数:";
cin>>G.arcnum;
int i=0;
int j=0;
for(;i<G.vexnum;i++)//构造顶点数组
{
cout<<"请输入第"<<i+1<<"个顶点:";
cin>>G.vex[i];
}
for(i=0;i<G.vexnum;i++)//初始化邻接矩阵
{
for(;j<G.vexnum;j++)
{
G.arcs[i][j].adj=0;
G.arcs[i][j].info=NULL;
}
}
char v1,v2;
for(int k=0;k<G.arcnum;k++)
{
cout<<"请输入第"<<k+1<<"条弧的两个顶点:"<<endl;
cout<<"顶点1:";
cin>>v1;
cout<<"顶点2:";
cin>>v2;
i=LocateVex(G,v1);//确定v1在图G中的位置
j=LocateVex(G,v2);//确定v2在图G中的位置
G.arcs[i][j].adj=1;
G.arcs[j][i]=G.arcs[i][j];
}
cout<<"创建无向图成功!"<<endl;
}
int FirstAdjVex(MGraph G, int v)//得到v的第一个邻接顶点
{
for(int i=0;i<G.vexnum;i++)
{
if(G.arcs[v][i].adj)
{
return i;
break;
}
}
}
int NextAdjVex(MGraph G, int v,int nTemp)
{
for(int i=nTemp+1;i<G.vexnum;i++)
{
if(G.arcs[v][i].adj)
{
return i;
break;
}
}
}
void DFS(MGraph G,int v1)
{
Visited[v1]=true;
cout<<G.vex[v1];
int nTemp;
for(nTemp=FirstAdjVex(G,v1);nTemp>=0;nTemp=NextAdjVex(G,v1,nTemp))
if(!Visited[nTemp])
DFS(G,nTemp);
}
void DFSTraverse(MGraph G)//深度优先遍历函数
{
for(int v1=0;v1<G.vexnum;v1++)
Visited[v1]=0;//初始化方问标志
for(v1=0;v1<G.vexnum;v1++)
if(!Visited[v1])
DFS(G,v1);
}
void main()
{
MGraph G;
CreatUDG(G);//创建无向图G
DFSTraverse(G);//对图G作深度优先遍历
}
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunhuanwen 2008-11-11
  • 打赏
  • 举报
回复
没看懂你的逻辑
但问题出在DFS那个函数上,你看来是递归那个环节有非法访问
自己在检查下逻辑吧
不懂什么是无向图
hhyttppd 2008-11-11
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

#define MAX_VERTEX_NUM 20//最大顶点的个数
int Visited[MAX_VERTEX_NUM];

typedef struct ArcCell{
int adj;
char* info;//弧的相关信息
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct{
char vex[MAX_VERTEX_NUM];//顶点向量
AdjMatrix arcs;//邻接矩阵
int vexnum,arcnum;//顶点数,弧数
}MGraph;

int LocateVex(MGraph G,char v1)//查找v1在图G中的位置
{
int i=0;
for(;i <G.vexnum;i++)
if(G.vex[i]==v1)
return i;

if(i>=G.vexnum)
cout <<"ERROR!" << endl;

return -1;
}

void CreatUDG(MGraph &G)//采用数组表示法构造无向图G
{
cout <<"请输入您要创建的无向图的顶点的个数:";
cin>>G.vexnum;
cout <<"请输入您要创建的无向图的弧的个数:";
cin>>G.arcnum;
int i=0;
int j=0;
for(;i <G.vexnum;i++)//构造顶点数组
{
cout <<"请输入第" <<i+1 <<"个顶点:";
cin>>G.vex[i];
}
for(i=0;i <G.vexnum;i++)//初始化邻接矩阵
{
for(;j <G.vexnum;j++)
{
G.arcs[i][j].adj=0;
G.arcs[i][j].info=NULL;
}
}
char v1,v2;
for(int k=0;k <G.arcnum;k++)
{
cout <<"请输入第" <<k+1 <<"条弧的两个顶点:" <<endl;
cout <<"顶点1:";
cin>>v1;
cout <<"顶点2:";
cin>>v2;
i=LocateVex(G,v1);//确定v1在图G中的位置
j=LocateVex(G,v2);//确定v2在图G中的位置
G.arcs[i][j].adj=1;
G.arcs[j][i]=G.arcs[i][j];
}
cout <<"创建无向图成功!" <<endl;
}

int FirstAdjVex(MGraph G, int v)//得到v的第一个邻接顶点
{
for(int i=0;i <G.vexnum;i++)
{
if(G.arcs[v][i].adj)
{
return i;
}
}
return -1;
}
int NextAdjVex(MGraph G, int v,int nTemp)
{
for(int i=nTemp+1;i <G.vexnum;i++)
{
if(G.arcs[v][i].adj)
{
return i;
}
}

return -1;
}

void DFS(MGraph G,int v1)
{
Visited[v1]=true;
cout <<G.vex[v1];
int nTemp;
for(nTemp=FirstAdjVex(G,v1);nTemp>=0;nTemp=NextAdjVex(G,v1,nTemp))
if(!Visited[nTemp])
DFS(G,nTemp);
}
void DFSTraverse(MGraph G)//深度优先遍历函数
{
int v1 = 0;
for(;v1 <G.vexnum;v1++)
Visited[v1]=0;//初始化方问标志
for(v1=0;v1 <G.vexnum;v1++)
if(!Visited[v1])
DFS(G,v1);
}
void main()
{
MGraph G;
CreatUDG(G);//创建无向图G
DFSTraverse(G);//对图G作深度优先遍历
}
tianma2005123 2008-11-11
  • 打赏
  • 举报
回复
好长,LZ说下,提示什么错误。
sunhuanwen 2008-11-11
  • 打赏
  • 举报
回复
好长,先看看

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧