数据结构 图的深度优先搜索问题 求高人指教
运行后要求我不断输入 一直输入 输了几十次还让输 就是不运行 找了很久不知错误在哪,求高人指教......
下面是源代码:
#include <stdio.h>
#define INFINITY 0
#define MAX_VERTEX_NUM 20
#define OK true
#define FALSE false
typedef bool Status;
bool visited[MAX_VERTEX_NUM];
Status (*VisitFunc)(int v);
typedef struct ArcCell
{
int adj;//权重
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
int vexs[MAX_VERTEX_NUM];//顶点向量
AdjMatrix arcs;//邻接矩阵
int vexnum,arcnum;//顶点数和弧数
}MGraph;
Status PrintElem(int v)
{
printf("%d ",v);
return OK;
}
Status CreateUDN(MGraph &G)//创建图
{ int i,j,k; int v1,v2,w;
scanf("%d%d",&G.vexnum,&G.arcnum);
for(i=0;i<G.vexnum;i++) scanf("%d",&G.vexs[i]);
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++) G.arcs[i][j].adj=INFINITY;
for(k=0;k<G.arcnum;k++)
{
scanf("%d%d%d",&v1,&v2,&w);
G.arcs[v1][v2].adj=w;
G.arcs[v2][v1].adj=w;
}
return OK;
}
int NextAdjVex(MGraph G,int v,int w)//下一个顶点
{
int i;int w1,vector;w1=vector=0;
for(i=0;i<G.vexnum;i++)
{
if(G.arcs[v][i].adj>vector&&visited[i]==FALSE)
{
w1=i;
vector=G.arcs[v][i].adj;
}
}
if(vector==0) return 0;
return w1;
}
void DFS(MGraph G,int v)
{ int w;
visited[v]=OK; VisitFunc(v);
for(w=v;w>=0;w=NextAdjVex(G,v,w))
{
if(!visited[w]) DFS(G,w);
}
}
void DFSTraverse(MGraph G,Status (*Visit)(int))
{
int v;
VisitFunc=Visit;
for(v=0;v<G.vexnum;++v) visited[v]=FALSE;
for(v=0;v<G.vexnum;++v) if(!visited[v]) DFS(G,v);
}
int main()
{
Status (*Visit)(int e);
Visit=&PrintElem;
MGraph G;
CreateUDN(G);
DFSTraverse(G,Visit);
return 0;
}
[解决办法]
LZ你的程序是可以运行的,不过建议你下次再写的是时候还是加上提示信息,在程序运行过程中可以掌握运行情况,而且程序出错的位置也可以很明显看出来。不过程序中还是有点问题,给你我的博客地址,可以交流学习下。
http://blog.csdn.net/furney